浅谈关于PHP解决图片无损压缩的问题


Posted in PHP onSeptember 01, 2017

本文介绍了关于PHP解决图片无损压缩的问题,分享给大家,具体如下:

代码如下:

header("Content-type: image/jpeg"); 
$file = "111.jpg"; 
$percent = 1.5; //图片压缩比 
list($width, $height) = getimagesize($file); //获取原图尺寸 
//缩放尺寸 
$newwidth = $width * $percent; 
$newheight = $height * $percent; 
$src_im = imagecreatefromjpeg($file); 
$dst_im = imagecreatetruecolor($newwidth, $newheight); 
imagecopyresized($dst_im, $src_im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 
imagejpeg($dst_im); //输出压缩后的图片 
imagedestroy($dst_im); 
imagedestroy($src_im);

我发现用php的imagecopyresized把大图片缩成小图片时,图片会变得很模糊,这时候要提升清晰度不如用 imagecopyresampled 代替 imagecopyresized也许会更好。

注:压缩有损失是必然的,看的清楚与否实际上就是是否接受这个范围的问题.比如你图像上原图有些点是2px,但是你压缩5倍,那么这些点就会消失。

<?php  
/** 
* desription 压缩图片 
* @param sting $imgsrc 图片路径 
* @param string $imgdst 压缩后保存路径 
*/ 
function image_png_size_add($imgsrc,$imgdst){  
 list($width,$height,$type)=getimagesize($imgsrc);  
 $new_width = ($width>600?600:$width)*0.9;  
 $new_height =($height>600?600:$height)*0.9;  
 switch($type){  
  case 1:  
   $giftype=check_gifcartoon($imgsrc);  
   if($giftype){  
    header('Content-Type:image/gif');  
    $image_wp=imagecreatetruecolor($new_width, $new_height);  
    $image = imagecreatefromgif($imgsrc);  
    imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);  
    imagejpeg($image_wp, $imgdst,75);  
    imagedestroy($image_wp);  
   }  
   break;  
  case 2:  
   header('Content-Type:image/jpeg');  
   $image_wp=imagecreatetruecolor($new_width, $new_height);  
   $image = imagecreatefromjpeg($imgsrc);  
   imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);  
   imagejpeg($image_wp, $imgdst,75);  
   imagedestroy($image_wp);  
   break;  
  case 3:  
   header('Content-Type:image/png');  
   $image_wp=imagecreatetruecolor($new_width, $new_height);  
   $image = imagecreatefrompng($imgsrc);  
   imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);  
   imagejpeg($image_wp, $imgdst,75);  
   imagedestroy($image_wp);  
   break;  
 }  
}  
/** 
* desription 判断是否gif动画 
* @param sting $image_file图片路径 
* @return boolean t 是 f 否 
*/ 
function check_gifcartoon($image_file){  
 $fp = fopen($image_file,'rb');  
 $image_head = fread($fp,1024);  
 fclose($fp);  
 return preg_match("/".chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0'."/",$image_head)?false:true;  
}  
?>

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

PHP 相关文章推荐
PHP 身份证号验证函数
May 07 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
PHP内核探索之解释器的执行过程
Dec 22 PHP
php实现贪吃蛇小游戏
Jul 26 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
php中的单引号、双引号和转义字符详解
Feb 16 PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 #PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 #PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 #PHP
php插件Xajax使用方法详解
Aug 31 #PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 #PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 #PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 #PHP
You might like
php二分法在IP地址查询中的应用
2008/08/12 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
初识php MVC
2014/09/10 PHP
discuz目录文件资料汇总
2014/12/30 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
连接pandas以及数组转pandas的方法
2019/06/28 Python
python实现超级玛丽游戏
2020/03/18 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
租车协议书
2015/01/27 职场文书
环卫工作个人总结
2015/03/04 职场文书
2015年资料员工作总结
2015/04/25 职场文书
格林童话读书笔记
2015/06/30 职场文书
运动会800米赞词
2015/07/22 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
Python进行区间取值案例讲解
2021/08/02 Python