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从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
PHP获取数组最大值下标的方法
May 12 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
Apr 02 PHP
php简单实现数组分页的方法
Apr 30 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
Netbeans 8.2将支持PHP7 更精彩
Jun 13 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
php实用代码片段整理
Nov 12 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 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
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
民族团结先进集体事迹材料
2014/05/22 职场文书
商务司机岗位职责
2015/04/10 职场文书
科级干部培训心得体会
2016/01/06 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android