PHP GD imagejpeg:输出文件大小比原始文件大
Posted
技术标签:
【中文标题】PHP GD imagejpeg:输出文件大小比原始文件大【英文标题】:PHP GD imagejpeg: output file size is bigger size than original 【发布时间】:2015-01-14 05:33:54 【问题描述】:以下脚本应该创建质量较低且文件大小 (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
GD (imagejpeg) 90%: 581.7Kb GD (imagejpeg) 100%:1.1Mb ImageMagick 90%:431.7Kb ImageMagick 100%:780.9kb更新 2
我对 GIMP 进行了更多测试,发现要获得与原始文件大小非常相似的文件,您必须选中选项 use quality setting from original image
。
现在我更困惑了……因为当我选择该设置时,Gimp 会自动将输出质量更改为 74%(对于示例图像)。 我假设 JPEG 质量值(如果低于 100%)会在每次保存迭代时降低图像质量……但我开始认为我错了。
更新 3
ImageMagick
没有必要指定样本的质量,如果将其留空ImageMagick
将使用在输入图像中检测到的相同质量。
因此对于示例图像,它被检测为质量为 69,并且输出文件为 326kb。这是迄今为止最好的结果。
这是我正在使用的图像:
【问题讨论】:
您可以将您的 jpeg 质量从90
降低到 75
(甚至更低),如果您可以使用 ImageMagick,它是一个很棒的工具!
同意上面的评论,问题出在90
,大概就是这个问题。
来吧,如果我降低图像质量,我应该得到一个更小的文件大小.. 同样,如果我使用 100 的质量,我应该得到相同的文件大小,而不是我得到一个图像4 倍大
上传图片怎么样?
完成。我也测试了 imageMagik
【参考方案1】:
我看过这个。您可以在 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 - 您的里程可能会有所不同!!!
【讨论】:
我有点困惑,也许是因为我不是很喜欢图像处理......难道没有更大的尺寸就不能打开 jpg 并重新保存它吗? 不同的程序对色彩保真度、图像质量、平滑度、锐度、处理时间、文件大小做出不同的决定。 是的,当然。但是如果我保存 10 次图像并且每次选择质量 70% ......每个保存的文件的质量都会降低 30% 吗?据我了解没有以上是关于PHP GD imagejpeg:输出文件大小比原始文件大的主要内容,如果未能解决你的问题,请参考以下文章
GD,加载 libJPEG,imagejpeg 返回 false
PHP 输出图像 imagegif imagejpeg 与 imagepng 函数