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 存储文本换行实现方法
Jan 05 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
php访问数组最后一个元素的函数end()用法
Mar 18 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
Jul 31 PHP
用php代码限制国内IP访问我们网站
Sep 26 PHP
深入解析WordPress中加载模板的get_template_part函数
Jan 11 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 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
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
jQuery 表单验证扩展(四)
2010/10/20 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
Element Input组件分析小结
2018/10/11 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
python操作xml文件示例
2014/04/07 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
python实现扫雷游戏
2020/03/03 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
幼儿园家长会欢迎词
2014/01/09 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
我爱读书演讲稿
2014/05/07 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
婚前协议书标准版
2014/10/19 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
Python max函数中key的用法及原理解析
2021/06/26 Python
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js
Android实现图片九宫格
2022/06/28 Java/Android