2015-05-12 72 views
2

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

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

因此,谁能告诉我,我能做些什么,而不会丢失压缩图像的大小其实际尺寸使用ImageMagick

回答

0

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

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

imagepng($im, 'dest.png', $quality); 
imagedestroy($im); 
2

尝试使用ImageMagick和定义的最大输出大小(KB),你想,让它降低质量,直到大小达到:

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

例如,如果我创建了一个2000×2000噪音的图像,像这样

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

我得到这个4MB文件。

[email protected] 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 

但它的像素尺寸保持不变,在2000×2000

identify output.jpg 

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

只为付n,您可以看到如何设置不同的文件大小更改质量设置:

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 
相关问题