[英]Using imagejpeg to make image files unnoticeable smaller
我正在用php创建图像共享网站。 我在读有关Google的Pagespeed的文章,他们说我需要优化我的图像,所以我一直在尝试使用imagejpeg来做到这一点,然后希望我能够在png和gif中使用基本相同的代码。
这是我目前的代码:
$img = imagecreatefromjpeg($original);
if ($extension === "jpg" || $extension === "jpeg"){
$location = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . $id . "/fullsize." . $extension;
$temp = fopen($location, 'w');
imagejpeg($img, $location, 80);
fclose($temp);
}
它的工作是以$ original拍摄图像,并将通过imagejpeg保存的副本保存到$ location。
但是有时生成的文件比原始文件大! 这就是我感到难过的地方。
为什么会这样呢?
我怎样才能使它停止发生?
我正在尝试减小图像文件的大小而又不损害其外观,有没有比这更好的方法了?
谢谢,
利亚姆
如果您将文件保存为比使用以下文件生成的原始文件质量低的质量设置,则imagejpeg仅会收缩文件
例如
imagejpeg($gd, 'temp.jpg', 50);
$temp = imagecreatefromjpeg('temp.jpg');
imagejpeg($gd, 'temp2.jpg', 70);
可能会生成一个更大的temp2文件,因为它的质量设置较高,这大概会转化为“压缩程度不高”。
如果没有实际完成整个jpeg压缩过程,就无法预测给定图像和质量设置的最终输出大小。 您可能需要对图像进行几次尝试性的重新压缩,并每次都降低质量设置,直到开始出现收缩。
当然,如果您将质量降低得太低,则基本上会破坏图像,并肯定会引入可见的伪像。
这绝对取决于原始图像的质量。 如果原始图像的质量为60,则保存为质量80通常会导致文件较大。
但是,这还取决于创建原始图像的软件。 例如,我观察到很多次Adobe Photoshop可以保存质量为60的图像,而该图像看起来可以比GD(您使用的图形库)中的80好。 此外,Photoshop经常可以以与其他图形包相同的质量保存图像,但是尺寸较小。 当然,这是主观的。 我不一定要得出结论,Photoshop是“更好的”,但是它似乎确实调整了选项。
我建议您尝试ImageMagick,因为我发现它通常比GD做得更好(文件大小,图像质量)。 您还应该确定每张图像的原始质量设置,以免意外增大图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.