我正在用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。
但有时生成的文件会比原始文件大!这就是我被难住的地方。
为什么会发生这种情况?
我怎样才能让它停止发生呢?
我正在尝试减少图像文件的大小而不影响它们的外观,有没有比这更好的方法呢?
谢谢,
利亚姆
发布于 2012-09-27 11:41:55
imagejpeg只会缩小文件,如果你保存它的质量设置比产生的原始文件低
例如:
imagejpeg($gd, 'temp.jpg', 50);
$temp = imagecreatefromjpeg('temp.jpg');
imagejpeg($gd, 'temp2.jpg', 70);可能会生成更大的temp2文件,因为它的质量设置更高,这大致相当于“不要压缩太多”。
如果不经过整个jpeg压缩过程,就无法预测给定图像和质量设置的最终输出大小。您可能必须对图像进行几次尝试重新压缩,并降低每次的质量设置,直到开始出现一些收缩。
当然,如果你把质量降低得太低,你基本上会把图像搞得一团糟,而且肯定会引入可见的伪像。
发布于 2012-09-27 12:30:09
这绝对取决于原始图像的质量。如果图像最初的质量为60,则以质量80保存通常会导致文件较大。
但是,它还取决于创建原始映像的软件。例如,我多次观察到Adobe Photoshop可以从GD (您正在使用的图形库)中保存质量为60的图像,该图像看起来与80一样好。此外,Photoshop通常可以以与另一个图形包相同的质量存储图像,但尺寸较小。当然,这是主观的。我并不一定认为Photoshop是“更好的”,但它的选项似乎调整得很好。
我建议你试试ImageMagick,因为我看到它通常比GD做得更好(文件大小,图像质量)。您还应该确定每个图像的原始质量设置,这样才不会意外地放大图像。
https://stackoverflow.com/questions/12613731
复制相似问题