php - 使用 GD/PHP 调整大小时优化 PNG - 如何确定调色板?

标签 php image resize png

我在调整 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;

enter image description here

关于php - 使用 GD/PHP 调整大小时优化 PNG - 如何确定调色板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642018/

相关文章:

jquery - slider 高度技术

javascript - 在服务器端使用带有 PHP 的 JQuery Ajax 提交文件和文本数据。

php - 连接 php 字符串;使用 。运算符或双引号

javascript - 单击/取消单击按钮时更改图像

facebook - 如何让某人的个人资料图片显示给他们?

c++ - 如何获取 std::map 的前 n 个元素

php - 在单个查询中获取所有推荐用户?

php - CodeIgniter View 页面为空

Javascript - 如何缩放背景图像

html - 从两侧调整 DIV 的大小,而不仅仅是 Angular 落