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 相关文章推荐
人大复印资料处理程序_补充篇
Oct 09 PHP
phpmyadmin的#1251问题
Nov 25 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
Apr 13 PHP
php笔记之常用文件操作
Oct 12 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
Dec 28 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
PHP输出Excel PHPExcel的方法
Jul 26 PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 PHP
PHP PDOStatement::errorCode讲解
Jan 31 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
基于empty函数的判断详解
2013/06/17 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
用python 制作图片转pdf工具
2015/01/30 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
用python绘制樱花树
2020/10/09 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
全球性的女装店:storets
2019/06/12 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
英国购买威士忌网站:Master of Malt
2019/09/26 全球购物
语文教育专业应届生求职信
2013/11/23 职场文书
大学生的四年学习自我评价
2013/12/13 职场文书
事业单位鉴定材料
2014/05/25 职场文书
教师工作表现评语
2014/12/31 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
你真的会用Mysql的explain吗
2022/03/31 MySQL