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+mysql)
Nov 23 PHP
php设计模式 Mediator (中介者模式)
Jun 26 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
PHP中array_merge和array相加的区别分析
Jun 17 PHP
提高PHP性能的编码技巧以及性能优化详细解析
Aug 24 PHP
php中base64_decode与base64_encode加密解密函数实例
Nov 24 PHP
php实现指定字符串中查找子字符串的方法
Mar 17 PHP
php替换字符串中间字符为省略号的方法
May 04 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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
mysql建立外键
2006/11/25 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
php查询ip所在地的方法
2014/12/05 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
用于table内容排序
2006/07/21 Javascript
JavaScript 继承详解 第一篇
2009/08/30 Javascript
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
python生成随机图形验证码详解
2017/11/08 Python
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
Python Lambda函数使用总结详解
2019/12/11 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
个人简历自我评价
2014/01/06 职场文书
婚假请假条怎么写
2014/04/10 职场文书
建房协议书
2014/04/11 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
流动人口婚育证明
2014/10/19 职场文书
面试感谢信范文
2015/01/22 职场文书
python全面解析接口返回数据
2022/02/12 Python
一行Python命令实现批量加水印
2022/04/07 Python
Java数据结构之堆(优先队列)
2022/05/20 Java/Android