我在调整 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);
问题:两个结果都不令人满意。
我确信一定有办法 1. 确定调色板,2. 保持图像的大部分颜色,以便 3. PNG 看起来与原始图像相似,并且具有可接受的文件大小。
现在,我只看到 JPG 而不是 PNG。但如果您知道解决方案,请让我/我们知道,我们将不胜感激。
谢谢!
最佳答案
您所需要的只是替换
$newImage = imagecreate($newwidth,$newheight);
与
$newImage = imagecreatetruecolor($newwidth, $newheight);
输出$maxImgWidth = 200;
关于php - 使用 GD/PHP 调整大小时优化 PNG - 如何确定调色板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642018/