php - 如何在 PHP 中通过 Imagick 将 PNG32 转换为 PNG8

标签 php png imagick

我想通过 php 对象 Imagick 将 PNG32 转换为 PNG8。 但是我用setImageDepth和setImageFormat设置param为8bit,没有生效。 代码如下:

$im = new Imagick($image);
$im->cropImage($cutWidth,$cutHeight,$x,$y);
$im->thumbnailImage($maxWidth, $maxHeight); 
$im->setImageDepth(8);
$im->setImageFormat('PNG8');
$im->writeImage($filename);

输入的文件是PNG32,但上面的输出还是PNG8,还有其他解决办法吗?

最佳答案

这似乎是一个已知问题,所以我做了一些研究。基本上,setImageDepth 是不够的。您需要量化图像。这是一个对我有用的测试脚本...

$im = new imagick('stupid.png'); //an image of mine
$im->setImageFormat('PNG8');
$colors = min(255, $im->getImageColors());
$im->quantizeImage($colors, Imagick::COLORSPACE_RGB, 0, false, false );
$im->setImageDepth(8 /* bits */);
$im->writeImage('stupid8.png');

结果很好。

关于php - 如何在 PHP 中通过 Imagick 将 PNG32 转换为 PNG8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10348743/

相关文章:

animation - "hide"a .gif inside a .jpg 有可能吗?

php - 如何在 PHP 中使用 Imagick 包装文本,以便将其绘制为多行文本?

php - 克隆是写时复制吗?

php - MySQL QUERY HAVING 子句不适用于 WHERE 子句

php - 增加一个mysql计数字段

windows - 用于打印为 PNG(或 SVG)的免费打印机

php - ImageMagick 缺少解码委托(delegate)

PHP守护进程脚本

PHP 对象++(整数++)

ffmpeg - 如何强制ffmpeg使用目录中的所有图像?