我在调整PNG大小和维护小文件时遇到了麻烦。 Solution found here
然而,在调整PNG大小时,我遇到了有关图像质量的问题。据我所见,GD使用索引的8位颜色调色板,扭曲文本和颜色迷失,请参阅:
²我在stackoverflow找到的调整的想法:创建真彩色图像,调整大小并将其复制到新图像,因此调色板是根据重采样结果确定的,图像质量更好正如您在image above中所看到的那样。
// 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);
问题:两种结果都不令人满意。
我很确定必须有一种方法来确定调色板,并且2.保持图像的大部分颜色,以便3. PNG看起来与原始颜色相似并且文件大小可以接受。< / p>
现在,我只看到JPG而不是PNG。但是如果你知道一个解决方案,如果你让我/我们知道,我们将不胜感激。
谢谢!
答案 0 :(得分:2)
您只需要替换
$newImage = imagecreate($newwidth,$newheight);
用
$newImage = imagecreatetruecolor($newwidth, $newheight);
输出$maxImgWidth = 200;
答案 1 :(得分:0)
PHP的GD分支没有可用的调色板生成,所以你只能获得带有vanialla libpng压缩的PNG32。
对于带调色板的小型PNG8使用pngquant,例如http://pngquant.org/php.html
然后使用advpng或zopfli-png进一步压缩它。