如何确定调色板 - 与GD / PHP调整时优化PNG?(Optimize PNG when res

2019-08-03 08:34发布

我有麻烦调整一个PNG,保持小的文件大小。 解决方案在这里找到 。

当调整的PNG,然而,我遇到的有关图像质量的问题。 至于我可以看到,GD使用索引的8位色调色板歪曲文本和颜色迷路,请参阅:

  • 原始图像
  • 与溶液调整大小的图像上面给出
  • 尺寸调整的图像与tweak²

²The想法的好办法,我发现这里的计算器 :创建真彩图像,调整其大小,并将其复制到一个新的形象,所以调色板是基于重采样结果,确定与图像质量更好,因为你可以在看图像以上 。

// 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。 但如果你知道一个解决方案,这将极大地意识到,如果你让我/我们知道。

谢谢!

Answer 1:

您只需要更换

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

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

输出$maxImgWidth = 200;



Answer 2:

GD的PHP的叉没有可用的选项产生,所以你只能用vanialla的libpng压缩得到PNG32。

对于小PNG8调色板使用pngquant,如http://pngquant.org/php.html

然后用advpng或zopfli,PNG进一步压缩。



文章来源: Optimize PNG when resizing with GD/PHP - How to determine color palette?