使用imagejpeg使图像文件变得难以察觉

时间:2012-09-27 03:39:34

标签: php image

我正在用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);
}

它可以将图像以原始图像保存,并将已经通过imagejpeg的副本保存到$ location。

但有时候生成的文件比原来的大!这是我被难倒的地方。

为什么会这样?

如何让它停止发生?

我正在尝试减少图像文件的大小而不会损害它们的外观,有没有比这更好的方法呢?

谢谢,

利安

2 个答案:

答案 0 :(得分:0)

imagejpeg只会缩小文件,如果以较低的质量设置保存文件,而不是使用

生成的原始文件。

e.g。

imagejpeg($gd, 'temp.jpg', 50);
$temp = imagecreatefromjpeg('temp.jpg');
imagejpeg($gd, 'temp2.jpg', 70);

可能会生成一个更大的temp2文件,因为它的质量设置较高,大致可以转换为“不要压缩太多”。

在没有实际完成整个jpeg压缩过程的情况下,没有办法预测给定图像和质量设置的最终输出大小。您可能需要对图像进行一些试验性重新压缩,并且每次都要降低质量设置,直到开始收缩为止。

当然,如果你将质量降低到太低,你基本上会废弃图像并且肯定会引入可见的伪像。

答案 1 :(得分:0)

这绝对取决于原始图像的质量。如果您的图像最初质量为60,则以80的质量保存通常会导致文件更大。

但是,它还取决于创建原始图像的软件。例如,我观察过很多次Adobe Photoshop可以保存质量为60的图像,从GD(你正在使用的图形库)看起来好到80。此外,Photoshop通常可以以与另一个图形包相同的质量保存图像,但尺寸较小。当然,这是主观的。我不一定总结Photoshop是“更好”,但它似乎确实有很好的选择。

我建议您尝试使用ImageMagick,因为我看到它通常比GD做得更好(文件大小,图像质量)。您还应确定每个图像的原始质量设置,以免意外生成图像。