压缩图像质量(从4MB到2MB)而不会丢失其尺寸

时间:2015-05-12 13:45:02

标签: php image imagemagick

我正在使用compress the quality尝试ImageMagick图片。我的意思是我的图片尺寸为1600X800,尺寸为4MB。现在我尝试将此图像的质量压缩为2MB而不调整其尺寸,这意味着新生成的图像也具有与实际图像(i.e. 1600X800)相同的尺寸,但此图像的质量应压缩为2MBhalf of the actual image)。为此,现在我使用下面的代码,但这不压缩新创建的图像的大小:

$src_img = "src.png";
$dest_img = "dest.png";
exec("convert $src_img -quality 90 $dest_img");

所以有人可以告诉我,如何使用ImageMagick来压缩图像的大小而不会丢失其实际尺寸?

2 个答案:

答案 0 :(得分:4)

尝试使用ImageMagick并定义所需的最大输出大小(以kB为单位),并在达到该大小之前降低质量:

convert input.jpg -define jpeg:extent=2000k output.jpg

例如,如果我创建一个2000x2000的噪声图像,就像这样

convert -size 2000x2000 xc:gray +noise gaussian input.jpg

我得到这个4MB的文件。

-rw-r--r--@  1 mark  staff    4175639 12 May 15:40 input.jpg

如果我使用上面的命令来减小文件大小

convert input.jpg -define jpeg:extent=2000k output.jpg

我得到这个1.9MB文件

-rw-r--r--   1 mark  staff    1933708 12 May 15:41 output.jpg

但其像素尺寸在2000x2000

时保持不变
identify output.jpg

output.jpg JPEG 2000x2000 2000x2000+0+0 8-bit sRGB 1.934MB 0.000u 0:00.000

为了好玩,您可以看到设置不同文件大小如何更改质量设置:

convert input.jpg -define jpeg:extent=2000k output.jpg <--- 2MB file => 82 quality
identify -verbose output.jpg | grep -i quality
Quality: 82

convert input.jpg -define jpeg:extent=1000k output.jpg <--- 1MB file => 65 quality
identify -verbose output.jpg | grep -i quality
Quality: 65

convert input.jpg -define jpeg:extent=500k output.jpg <--- 500kB file => 38 quality
identify -verbose output.jpg | grep -i quality
Quality: 38

如果你想要一种与Python类似的方法,我写了一个非常好的答案here。它对满足最大尺寸要求的JPEG质量进行二进制搜索。

答案 1 :(得分:0)

您可以使用GD库功能更改图像质量。它比使用exec()更安全。

$im = imagecreatefrompng("src.png");

imagepng($im, 'dest.png', $quality);
imagedestroy($im);
相关问题