码迷,mamicode.com
首页 > Web开发 > 详细

PHP图片缩放,裁剪和压缩

时间:2015-12-27 19:10:24      阅读:370      评论:0      收藏:0      [点我收藏+]

标签:

Google PageSpeed Insights可以对网页加载速度评分,并给出优化建议

 

简单来说,优化图片即使用合适尺寸的图片(缩放,裁剪),压缩图片

这里只介绍jpng和png两种图片格式

 

软件准备:

imagemagick

apt-get install imagemagick
 

jpegtran

apt-get install libjpeg-turbo-progs
 

optipng

apt-get install optipng

 

pngquant

apt-get install pngquant

 

php5-gd

apt-get install php5-gd

 

0.格式转换

一般来说,jpg图片比png图片小得多,如无特殊需求(如透明)使用jpg图片可大大减小图片大小

格式转换可使用convert命令

shell_exec(‘convert a.png a.jpg‘);

 

图片从7百k变成了1百k

技术分享

 

1.图片缩放

图片缩放可使用convert命令

$in = ‘a.png‘;
$out = ‘a-convert-resize-100.png‘;
//$out = ‘a.png‘;   replace the input infile

//escapeshellarg可处理文件名中的特殊字符如空格
shell_exec(‘convert -resize 100 ‘ . escapeshellarg($in) . ‘ ‘ . escapeshellarg($out));

 

图片从1850*983缩小到100*53(宽高比例不变)

技术分享

 

 

2.图片裁剪

图片裁剪可使用php的imagecopy()或imagecrop()函数实现

$in = ‘a.png‘;
$out = ‘a-copy.png‘;

//裁剪宽度
$width = 100;
//裁剪高度
$height = 80;
//原图的开始的x轴坐标
$x = 1;
//原图开始的y轴坐标
$y = 2;

$inImage = imagecreatefrompng($in);
//$inImage = imagecreatefromjpeg($in);
$outImage = imagecreatetruecolor($width, $height);
imagecopy($outImage, $inImage, 0, 0, $x, $y, $width, $height);
imagepng($outImage, $out);
//imagejpeg($outImage, $out);
imagedestroy($inImage);
imagedestroy($outImage);

 

3.图片压缩

jpg图片可使用convert有损压缩和jpegtran无损压缩

convert –quality可将图片按指定质量压缩,但有时可能会越压越大

jpegtran –progressive可将图片压缩为progressive图片,就是加载时先模糊后清晰的那种图,而不是从上到下显示

$in = ‘b.jpg‘;
$out = ‘b-convert-quality-60.jpg‘;
$out2 = ‘b-jpegtran-progressive.jpg‘;

$in = escapeshellarg($in);
$out = escapeshellarg($out);
$out2 = escapeshellarg($out2);

shell_exec(‘convert -quality 60 ‘ . $in . ‘ ‘ . $out);
shell_exec(‘jpegtran -copy none -optimize -progressive -outfile ‘ . $out2 . ‘ ‘ . $out);

 

技术分享

 

png图片可使用pngquant有损压缩和optipng无损压缩

pngquant可将png32或png24图片压缩为png8图,仍保留了透明

pngquat –quality 设置过大经常会使图片越压越大,所以要小心设置,或不设置

$in = ‘a.png‘;
$out = ‘a-pngquant.png‘;
$out2 = ‘a-pngquant-optipnt.png‘;

$in = escapeshellarg($in);
$out = escapeshellarg($out);
$out2 = escapeshellarg($out2);

shell_exec(‘pngquant --speed 1 -o ‘ . $out . ‘ ‘ . $in);
//replace file
//shell_exec(‘pngquant --speed 1 -f --ext .png ‘ . $in);

shell_exec(‘optipng -strip all -quiet -clobber -o3 -i0 ‘ . $out . ‘ -out ‘ . $out2);
 
技术分享

 

4.先缩放还是先压缩

好像先缩放后压缩会更小(不一定准确,我只测了几张图,并且清晰度比较不了我的屏幕太模糊。。。)

下图为a.png(1850*980)的测试数据

技术分享

 

下图为b.jpg(1920*1080)的测试数据

技术分享

 

 

参考资料

Google优化图片建议 https://developers.google.com/speed/docs/insights/OptimizeImages

携程博客 http://ued.ctrip.com/blog/image-optimization-tools.html

imagemagic http://www.imagemagick.org/script/command-line-processing.php

jpegtran http://jpegclub.org/jpegtran/

optipng

pngquant

PHP图片缩放,裁剪和压缩

标签:

原文地址:http://www.cnblogs.com/wuliguale/p/5080537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!