php等比例缩放图片及剪切图片代码分享


Posted in PHP onFebruary 13, 2016

php等比例缩放图片及剪切图片代码分享

/**
 * 图片缩放函数(可设置高度固定,宽度固定或者最大宽高,支持gif/jpg/png三种类型)
 * Author : Specs
 *
 * @param string $source_path 源图片
 * @param int $target_width 目标宽度
 * @param int $target_height 目标高度
 * @param string $fixed_orig 锁定宽高(可选参数 width、height或者空值)
 * @return string
 */
function myImageResize($source_path, $target_width = 200, $target_height = 200, $fixed_orig = ''){
  $source_info = getimagesize($source_path);
  $source_width = $source_info[0];
  $source_height = $source_info[1];
  $source_mime = $source_info['mime'];
  $ratio_orig = $source_width / $source_height;
  if ($fixed_orig == 'width'){
    //宽度固定
    $target_height = $target_width / $ratio_orig;
  }elseif ($fixed_orig == 'height'){
    //高度固定
    $target_width = $target_height * $ratio_orig;
  }else{
    //最大宽或最大高
    if ($target_width / $target_height > $ratio_orig){
      $target_width = $target_height * $ratio_orig;
    }else{
      $target_height = $target_width / $ratio_orig;
    }
  }
  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 false;
      break;
  }
  $target_image = imagecreatetruecolor($target_width, $target_height);
  imagecopyresampled($target_image, $source_image, 0, 0, 0, 0, $target_width, $target_height, $source_width, $source_height);
  //header('Content-type: image/jpeg');
  $imgArr = explode('.', $source_path);
  $target_path = $imgArr[0] . '_new.' . $imgArr[1];
  imagejpeg($target_image, $target_path, 100);
}

用法:

  1. myImageResize($filename, 200, 200); //最大宽高
  2. myImageResize($filename, 200, 200, 'width'); //宽度固定
  3. myImageResize($filename, 200, 200, '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){
    $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){ // 源图过宽
    $cropped_width = $source_height / $target_ratio;
    $cropped_height = $source_height;
    $source_x = ($source_width - $cropped_width) / 2;
    $source_y = 0;
  }else{ // 源图适中
    $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 false;
      break;
  }
  
  $target_image = imagecreatetruecolor($target_width, $target_height);
  $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);
  
  // 裁剪
  imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
  // 缩放
  imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);
  $dotpos = strrpos($source_path, '.');
  $imgName = substr($source_path, 0, $dotpos);
  $suffix = substr($source_path, $dotpos);
  $imgNew = $imgName . '_small' . $suffix;
  imagejpeg($target_image, $imgNew, 100);
  imagedestroy($source_image);
  imagedestroy($target_image);
  imagedestroy($cropped_image);
}
PHP 相关文章推荐
php设计模式 Interpreter(解释器模式)
Jun 26 PHP
PHP高级对象构建 工厂模式的使用
Feb 05 PHP
数据库中排序的对比及使用条件详解
Feb 23 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
PHP采用get获取url汉字出现乱码的解决方法
Nov 13 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
既简单又安全的PHP验证码 附调用方法
Jun 02 PHP
PHP实现网站访问量计数器
Oct 27 PHP
php curl操作API接口类完整示例
May 21 PHP
php如何获取Http请求
Apr 30 PHP
PHP信号量基本用法实例详解
Feb 12 #PHP
PHP消息队列用法实例分析
Feb 12 #PHP
PHP共享内存用法实例分析
Feb 12 #PHP
PHP连接MSSQL方法汇总
Feb 05 #PHP
Symfony2开发之控制器用法实例分析
Feb 05 #PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 #PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 #PHP
You might like
数据库的日期格式转换
2006/10/09 PHP
PHP cron中的批处理
2008/09/16 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
js的event详解。
2006/09/06 Javascript
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
银行职员自我鉴定
2014/04/20 职场文书
教师先进个人材料
2014/12/17 职场文书
小学校本教研总结
2015/08/13 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS
instantclient客户端 连接oracle数据库
2022/04/26 Oracle