以下脚本应该创建质量较低且文件较小(kb)的图像,而不是创建质量较低但文件较大的图像。
在我的测试中,原始大约300kb,使用90%的质量,输出几乎是双倍,使用100%质量,输出超过1mb ...
<?php
$quality = 90;
$path = '/var/www/TEST/';
$inputSrc = $path . 'original.jpg';
$outputSrc = $path . 'after' . $quality . '.jpg';
$handler = imagecreatefromjpeg($inputSrc);
imagejpeg($handler, $outputSrc, $quality);
我认为问题与imagejpeg
糟糕的实施有关......
ImageMagick
更好的解决方案吗?由于
更新
我很好奇所以我尝试了ImageMagick
,不幸的是我有类似的结果(稍好一点)。
完整测试结果:
原始尺寸:294.6Kb
更新2
我用GIMP进行了一些测试,看起来为了获得一个与原始文件大小非常相似的文件,你必须选中use quality setting from original image
选项。
现在我感到困惑...因为当我选择该设置时,Gimp会自动将输出质量更改为74%(对于示例图像)。
我假设JPEG质量值,如果低于100%,会在每次保存迭代时降低图像质量......但我开始认为我错了。
更新3
没有必要使用ImageMagick
指定样本的质量,如果将其留空ImageMagick
将使用输入图像中检测到的相同质量。
因此,对于示例图像,它被检测为69的质量,outfile是 326kb 。到目前为止,这是最好的结果。
这里是我正在使用的图片:
答案 0 :(得分:3)
我看了一下这个。您可以在ImageMagick中向后工作,而不是定义质量并查看结果大小,您可以定义大小并查看质量结果。因此,对于一个具体示例,您可以说您希望输出文件不超过100kB,如下所示:
convert MShRR.jpg -define jpeg:extent=100k out.jpg
你得到99kB这样:
-rw-r--r--@ 1 mark staff 294608 14 Jan 09:36 MShRR.jpg
-rw-r--r--@ 1 mark staff 99989 14 Jan 09:44 out.jpg
在我看来,最终的图像有点张贴:
您可以经常添加少量模糊来伪装,如下所示:
convert MShRR.jpg -blur x0.5 -define jpeg:extent=100k out.jpg
YMMV - 你的里程可能会变化!!!