PHP实现图片不变型裁剪及图片按比例裁剪的方法


Posted in PHP onJanuary 14, 2016

本文实例讲述了PHP实现图片不变型裁剪及图片按比例裁剪的方法。分享给大家供大家参考,具体如下:

图片不变型裁剪

<?php
/**
 * imageCropper
 * @param string $source_path
 * @param string $target_width
 * @param string $target_height
 */
function imageCropper($source_path, $target_width, $target_height){
  $source_info  = getimagesize($source_path);
  $source_width = $source_info[0];
  $source_height = $source_info[1];
  $source_mime  = $source_info['mime'];
  $source_ratio = $source_height / $source_width;
  $target_ratio = $target_height / $target_width;
  if ($source_ratio > $target_ratio){
    // image-to-height
    $cropped_width = $source_width;
    $cropped_height = $source_width * $target_ratio;
    $source_x = 0;
    $source_y = ($source_height - $cropped_height) / 2;
  }elseif ($source_ratio < $target_ratio){
    //image-to-widht
    $cropped_width = $source_height / $target_ratio;
    $cropped_height = $source_height;
    $source_x = ($source_width - $cropped_width) / 2;
    $source_y = 0;
  }else{
    //image-size-ok
    $cropped_width = $source_width;
    $cropped_height = $source_height;
    $source_x = 0;
    $source_y = 0;
  }
  switch ($source_mime){
    case 'image/gif':
      $source_image = imagecreatefromgif($source_path);
      break;
    case 'image/jpeg':
      $source_image = imagecreatefromjpeg($source_path);
      break;
    case 'image/png':
      $source_image = imagecreatefrompng($source_path);
      break;
    default:
      return ;
      break;
  }
  $target_image = imagecreatetruecolor($target_width, $target_height);
  $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);
  // copy
  imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
  // zoom
  imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);
  header('Content-Type: image/jpeg');
  imagejpeg($target_image);
  imagedestroy($source_image);
  imagedestroy($target_image);
  imagedestroy($cropped_image);
}
$filename = "8fcb7a0831b79c61.jpg";
imageCropper($filename,200,200);
?>

图片按比例裁剪

<?php
/**
 * imageZoom
 * @param string $file
 * @param double $zoom
 */
function imageZoom($filename,$zoom=0.6){
  //baseinfo
  $sourceImageInfo = getimagesize($filename);
  $sourceWidth = $sourceImageInfo[0];
  $sourceHeight = $sourceImageInfo[1];
  $sourceMine = $sourceImageInfo['mime'];
  $sourceRatio = $sourceWidth/$sourceHeight;
  $sourceX = 0;
  $sourceY = 0;
  //zoom
  $targetRatio = $zoom;
  //target-widht-height
  $targetWidth = $sourceWidth*$targetRatio;
  $targetHeight = $sourceHeight*$targetRatio;
  //init-params
  $sourceImage = null;
  switch($sourceMine){
    case 'image/gif':
      $sourceImage = imagecreatefromgif($filename);
      break;
    case 'image/jpeg':
      $sourceImage = imagecreatefromjpeg($filename);
      break;
    case 'image/png':
      $sourceImage = imagecreatefrompng($filename);
      break;
    default:
      return ;
      break;
  }
  //temp-target-image
  $tempSourceImage = imagecreatetruecolor($sourceWidth, $sourceHeight);
  $targetImage = imagecreatetruecolor($targetWidth,$targetHeight);
  //copy
  imagecopy($tempSourceImage, $sourceImage, 0, 0, $sourceX, $sourceY, $sourceWidth, $sourceHeight);
  //zoom
  imagecopyresampled($targetImage, $tempSourceImage, 0, 0, 0, 0, $targetWidth, $targetHeight, $sourceWidth, $sourceHeight);
  //header
  header('Content-Type: image/jpeg');
  //image-loading
  imagejpeg($targetImage);
  //destroy
  imagedestroy($tempSourceImage);
  imagedestroy($sourceImage);
  imagedestroy($targetImage);
}
$filename = "8fcb7a0831b79c61.jpg";
imageZoom($filename);
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP学习资料汇总与网址
Mar 16 PHP
PHP学习笔记之三 数据库基本操作
Jan 17 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
Dec 09 PHP
yii2实现分页,带搜索的分页功能示例
Jan 07 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
php数组和链表的区别总结
Sep 20 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 PHP
详解HTTP Cookie状态管理机制
Jan 14 #PHP
在php中设置session用memcache来存储的方法总结
Jan 14 #PHP
thinkphp实现图片上传功能
Jan 13 #PHP
PHP实现伪静态方法汇总
Jan 13 #PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
Jan 12 #PHP
优化WordPress中文章与评论的时间显示
Jan 12 #PHP
win平台安装配置Nginx+php+mysql 环境
Jan 12 #PHP
You might like
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
PHP递归统计系统中代码行数
2019/09/19 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
慎用 somefunction.prototype 分析
2009/06/02 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
vue实现分页组件
2020/06/16 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
python中解析json格式文件的方法示例
2017/05/03 Python
python中实现k-means聚类算法详解
2017/11/11 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
python对一个数向上取整的实例方法
2020/06/18 Python
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
外贸员简历中的自我评价
2014/03/04 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
会计专业求职信范文
2015/03/19 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
《灰雀》教学反思
2016/02/19 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
Python+Appium新手教程
2021/04/17 Python
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android