2

我在调整 PNG 大小和保持小文件大小时遇到​​了麻烦。解决方案在这里找到

然而,在调整 PNG 的大小时,我遇到了图像质量问题。据我所见,GD 使用索引的 8 位调色板,它会扭曲文本并且颜色会丢失,请参阅:

²我在stackoverflow中找到的调整想法:创建真彩色图像,调整它的大小,并将其复制到新图像,因此调色板是根据重新采样的结果确定的,图像质量更好,如您在图像中看到的以上

// create new image
$newImageTmp = imagecreatetruecolor($newwidth,$newheight);
// we create a temporary truecolor image
// do the image resizing by copying from the original into $newImageTmp image
imagecopyresampled($newImageTmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
// create output image
$newImage = imagecreate($newwidth,$newheight);
// copy resized truecolor image onto index-color image
imagecopy($newImage,$newImageTmp,0,0,0,0,$newwidth,$newheight);
// write image to buffer and save in variable
ob_start(); // stdout --> buffer
imagepng($newImage,NULL,6);
$newImageToSave = ob_get_contents(); // store stdout in $newImageToSave
ob_end_clean(); // clear buffer
// remove images from php buffer
imagedestroy($src);
imagedestroy($newImageTmp);
imagedestroy($newImage);

问题:两种结果都不令人满意。

我很确定必须有一种方法来 1. 确定调色板,以及 2. 保持图像的大部分颜色,以便 3. PNG 看起来与原始图像相似并且具有可接受的文件大小。

现在,我只看到 JPG 而不是 PNG。但是,如果您知道解决方案,如果您让我/我们知道,将不胜感激。

谢谢!

4

2 回答 2

2

您只需要更换

 $newImage = imagecreate($newwidth,$newheight);

 $newImage = imagecreatetruecolor($newwidth, $newheight);

输出$maxImgWidth = 200;

在此处输入图像描述

于 2012-11-30T09:25:49.757 回答
0

PHP 的 GD 分支没有可用的调色板生成,因此您只能获得带有 vanialla libpng 压缩的 PNG32。

对于带有调色板的小型 PNG8,请使用 pngquant,例如http://pngquant.org/php.html

然后使用 advpng 或 zopfli-png 进一步压缩它。

于 2014-10-20T22:10:07.003 回答