1

我正在用 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。

但有时生成的文件比原始文件大!这就是我难过的地方。

为什么会这样?

我怎样才能让它停止发生?

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

谢谢,

利亚姆

4

2 回答 2

0

imagejpeg 只会在您以低于原始文件的质量设置保存文件时缩小文件

例如

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

可能会产生一个更大的 temp2 文件,因为它的质量设置更高,大致翻译为“不要压缩那么多”。

如果不实际经历整个 jpeg 压缩过程,就无法预测给定图像和质量设置的最终输出大小。您可能需要对图像进行几次尝试重新压缩并每次降低质量设置,直到您开始出现一些收缩。

当然,如果您将质量降低得太低,您基本上会破坏图像并肯定会引入可见的伪影。

于 2012-09-27T03:41:54.603 回答
0

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

但是,这也取决于创建原始图像的软件。例如,我多次观察到 Adob​​e Photoshop 可以保存质量为 60 的图像,而 GD(您正在使用的图形库)看起来与 80 一样好。此外,Photoshop 通常可以以与其他图形包相同的质量保存图像,但尺寸更小。当然,这是主观的。我不一定认为 Photoshop 是“更好的”,但它的选项似乎调整得很好。

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

于 2012-09-27T04:30:09.333 回答