Mas*_*ash 2 php image imagemagick
我正在尝试compress the quality使用图像ImageMagick。1600X800我的意思是我有一个尺寸为且大小为 的图像4MB。现在我试图在2MB不调整其尺寸的情况下压缩该图像的质量,这意味着新生成的图像也具有与实际图像相同的尺寸(i.e. 1600X800),但该图像的质量应压缩为2MB(half of the actual image)。为此,现在我使用下面的代码,但这并没有压缩新创建的图像的大小:
$src_img = "src.png";
$dest_img = "dest.png";
exec("convert $src_img -quality 90 $dest_img");
Run Code Online (Sandbox Code Playgroud)
那么有人可以告诉我我可以做什么来压缩图像的大小而不丢失其实际尺寸吗ImageMagick?
尝试使用 ImageMagick 并定义您想要的最大输出大小(以 kB 为单位),并让它降低质量,直到达到该大小:
convert input.jpg -define jpeg:extent=2000k output.jpg
Run Code Online (Sandbox Code Playgroud)
例如,如果我创建一个 2000x2000 的噪声图像,如下所示
convert -size 2000x2000 xc:gray +noise gaussian input.jpg
Run Code Online (Sandbox Code Playgroud)
我得到这个 4MB 的文件。
-rw-r--r--@ 1 mark staff 4175639 12 May 15:40 input.jpg
Run Code Online (Sandbox Code Playgroud)
如果我使用上面的命令来减小文件大小
convert input.jpg -define jpeg:extent=2000k output.jpg
Run Code Online (Sandbox Code Playgroud)
我得到这个 1.9MB 的文件
-rw-r--r-- 1 mark staff 1933708 12 May 15:41 output.jpg
Run Code Online (Sandbox Code Playgroud)
但其像素尺寸保持不变,为 2000x2000
identify output.jpg
output.jpg JPEG 2000x2000 2000x2000+0+0 8-bit sRGB 1.934MB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)
只是为了好玩,您可以看到设置不同的文件大小如何改变质量设置:
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
Run Code Online (Sandbox Code Playgroud)
如果你想要一种用 Python 做类似事情的方法,我在这里写了一个非常有效的答案。它对满足最大尺寸要求的 JPEG 质量进行二分搜索。