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中的CMS的涵义
Mar 11 PHP
防止MySQL注入或HTML表单滥用的PHP程序
Jan 21 PHP
PHP 源代码压缩小工具
Dec 22 PHP
PHP防CC攻击实现代码
Dec 29 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
php统计数组元素个数的方法
Jul 02 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
php获取数据库结果集方法(推荐)
Jun 01 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
Apr 30 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
php中常用的预定义变量小结
2012/05/09 PHP
如何用PHP实现插入排序?
2013/04/10 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
JS代码同步文本框内容的实例方法
2013/07/12 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
2019/12/20 jQuery
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
粗加工管理制度
2014/02/04 职场文书
婚前保证书
2014/04/29 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
共青团员自我评价
2015/03/10 职场文书
小学德育工作总结2015
2015/05/12 职场文书