PHP实现图片压缩


Posted in PHP onSeptember 09, 2020

本文实例为大家分享了PHP实现图片压缩的具体代码,供大家参考,具体内容如下

/**
 * 生成图片
 * @param string $im 源图片路径
 * @param string $dest 目标图片路径
 * @param int $maxwidth 生成图片宽
 * @param int $maxheight 生成图片高
 */
function resizeImage($im, $dest, $maxwidth, $maxheight) {
 $img = getimagesize($im);
 switch ($img[2]) {
 case 1:
  $im = @imagecreatefromgif($im);
  break;
 case 2:
  $im = @imagecreatefromjpeg($im);
  break;
 case 3:
  $im = @imagecreatefrompng($im);
  break;
 }
 
 $pic_width = imagesx($im);
 $pic_height = imagesy($im);
 $resizewidth_tag = false;
 $resizeheight_tag = false;
 if (($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) {
 if ($maxwidth && $pic_width > $maxwidth) {
  $widthratio = $maxwidth / $pic_width;
  $resizewidth_tag = true;
 }
 
 if ($maxheight && $pic_height > $maxheight) {
  $heightratio = $maxheight / $pic_height;
  $resizeheight_tag = true;
 }
 
 if ($resizewidth_tag && $resizeheight_tag) {
  if ($widthratio < $heightratio)
  $ratio = $widthratio;
  else
  $ratio = $heightratio;
 }
 
 
 if ($resizewidth_tag && !$resizeheight_tag)
  $ratio = $widthratio;
 if ($resizeheight_tag && !$resizewidth_tag)
  $ratio = $heightratio;
 $newwidth = $pic_width * $ratio;
 $newheight = $pic_height * $ratio;
 
 if (function_exists("imagecopyresampled")) {
  $newim = imagecreatetruecolor($newwidth, $newheight);
  imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
 } else {
  $newim = imagecreate($newwidth, $newheight);
  imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
 }
 
 imagejpeg($newim, $dest);
 imagedestroy($newim);
 } else {
 imagejpeg($im, $dest);
 }
}
 
/**
 * 图片压缩处理
 * @param string $sFile 源图片路径
 * @param int $iWidth 自定义图片宽度
 * @param int $iHeight 自定义图片高度
 * @return string 压缩后的图片路径
 */
function getThumb($sFile,$iWidth,$iHeight){
 //图片公共路径
 $public_path = '';
 //判断该图片是否存在
 if(!file_exists($public_path.$sFile)) return $sFile;
 //判断图片格式(图片文件后缀)
 $extend = explode("." , $sFile);
 $attach_fileext = strtolower($extend[count($extend) - 1]);
 if (!in_array($attach_fileext, array('jpg','png','jpeg'))){
 return '';
 }
 //压缩图片文件名称
 $sFileNameS = str_replace(".".$attach_fileext, "_".$iWidth.'_'.$iHeight.'.'.$attach_fileext, $sFile);
 //判断是否已压缩图片,若是则返回压缩图片路径
 if(file_exists($public_path.$sFileNameS)){
 return $sFileNameS;
 }
 
 //生成压缩图片,并存储到原图同路径下
 resizeImage($public_path.$sFile, $public_path.$sFileNameS, $iWidth, $iHeight);
 if(!file_exists($public_path.$sFileNameS)){
 return $sFile;
 }
 return $sFileNameS;
}

使用实例:

//原图 img/img.jpg
//生成压缩图 img/img_300_300.jpg
getThumb('img/img.jpg',300,300);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木,关注三水点靠木公众号的更多精彩内容。

PHP 相关文章推荐
一个简单的自动发送邮件系统(二)
Oct 09 PHP
elgg 获取文件图标地址的方法
Mar 20 PHP
php array_unique之后json_encode需要注意
Jan 02 PHP
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
PHP之短标签开启设置
Jun 17 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
yii2多图上传组件的使用教程
May 10 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
Yii框架中使用PHPExcel的方法分析
Jul 25 PHP
在laravel中使用with实现动态添加where条件
Oct 10 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 #PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 #PHP
PHP解析url并得到url参数方法总结
Oct 11 #PHP
详细对比php中类继承和接口继承
Oct 11 #PHP
PHP JWT初识及其简单示例
Oct 10 #PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 #PHP
php实现单笔转账到支付宝功能
Oct 09 #PHP
You might like
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
Javascript继承机制的设计思想分享
2011/08/28 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
Python程序设计入门(3)数组的使用
2014/06/16 Python
9种python web 程序的部署方式小结
2014/06/30 Python
浅析Python中的join()方法的使用
2015/05/19 Python
Python环境变量设置方法
2016/08/28 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
银行领导证婚词
2014/01/11 职场文书
自荐书4要点
2014/01/25 职场文书
人事助理自荐信
2014/02/02 职场文书
放飞蜻蜓反思
2014/02/05 职场文书
担保书格式及范文
2014/04/01 职场文书
投资协议书范本
2014/04/21 职场文书
运动会口号8字
2014/06/07 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
大学新生入学感想
2015/08/07 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书