我正在用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。
但有时候生成的文件比原来的大!这是我被难倒的地方。
为什么会这样?
如何让它停止发生?
我正在尝试减少图像文件的大小而不会损害它们的外观,有没有比这更好的方法呢?
谢谢,
利安
答案 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做得更好(文件大小,图像质量)。您还应确定每个图像的原始质量设置,以免意外生成图像。