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+mysql分页代码详解
Mar 27 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
Sep 29 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
php实现图片转换成ASCII码的方法
Apr 03 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
Oct 09 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
Mar 18 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
PHP中关键字interface和implements详解
Jun 14 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 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
php基础知识:类与对象(5) static
2006/12/13 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
php微信开发之百度天气预报
2016/11/18 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
vue2.0设置proxyTable使用axios进行跨域请求的方法
2017/10/19 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
浅谈小程序 setData学问多
2019/02/20 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
记录Django开发心得
2014/07/16 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
公共事业管理本科生求职信
2013/10/07 职场文书
物流专业大学应届生求职信
2013/11/03 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers