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 相关文章推荐
一个php作的文本留言本的例子(五)
Oct 09 PHP
在同一窗体中使用PHP来处理多个提交任务
May 08 PHP
使用php批量删除数据库下所有前缀为prefix_的表
Jun 09 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php导入大量数据到mysql性能优化技巧
Dec 29 PHP
php制作文本式留言板
Mar 18 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 PHP
JSON字符串传到后台PHP处理问题的解决方法
Jun 05 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 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
第七节 类的静态成员 [7]
2006/10/09 PHP
PHP STRING 陷阱原理说明
2010/07/24 PHP
php中return的用法实例分析
2015/02/28 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
在Python的Django框架中编写编译函数
2015/07/20 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
Python守护线程用法实例
2017/06/23 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
搞笑爱情保证书
2014/04/29 职场文书
镇创先争优活动总结
2014/08/28 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
2014年教研室工作总结
2014/12/06 职场文书
考研导师推荐信范文
2015/03/27 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
python自动计算图像数据集的RGB均值
2021/06/18 Python
详解Java实现数据结构之并查集
2021/06/23 Java/Android