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

标签 php image imagemagick

我正在尝试使用 ImageMagick压缩图像的质量。我的意思是我有一个尺寸为 1600X800 且大小为 4MB 的图像。现在我尝试将此图像的质量压缩为2MB而不调整其尺寸,这意味着新生成的图像也具有与实际图像相同的尺寸(即1600X800)但是该图像的质量应压缩为2MB(实际图像的一半)。为此,现在我使用下面的代码,但这并没有压缩新创建的图像的大小:

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

那么谁能告诉我如何使用ImageMagick来压缩图像的大小而不丢失其实际尺寸?

最佳答案

尝试使用 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 质量进行二分搜索。

关于php - 压缩图像质量(从 4MB 到 2MB)而不丢失其尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30192764/

相关文章:

php - 如何获取额外数据以提供 symfony2 集合字段类型?

html - Amazon S3 在浏览器中翻转肖像图像?

PHP:使用 GD/Imagemagick 确定通过 Curl 下载的视觉损坏图像(但有效)

php - 如何优化大表的计数查询

php - 如何使用 javascript/html/css 模拟 struts 验证

python - 如何使用纯 Numpy 函数在网格数组上绘制和填充多边形?

java - 在我的 Java Applet 中绘制此图像不起作用

image - 使用 rmagick 像在 Photoshop 中一样为图像着色

python - 查找所有具有正方形尺寸的图像 (1 :1 ratio)

php - 是否有人在用户代码(非本地)中创建了类似 PHP Session 的类?