ImageMagick:无法将24位bmp图像转换为8位bmp图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageMagick:无法将24位bmp图像转换为8位bmp图像相关的知识,希望对你有一定的参考价值。

我的编程平台是:

  • Ubuntu 3.19
  • ImageMagick 6.7.7
  • 编程语言:php

我的代码:

$img = new Imagick($image_input_24bit_bmp);
$img->setimagedepth(8);
$img->writeImage($image_output);

然后image_output仍然是24位bmp图像。

我想要的是将24位bmp图像转换为8位bmp图像。谢谢。

答案

setImageDepth还不够。你需要quanitize图像。

示例:测试脚本

$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');
另一答案

你可以像这样强制一个8位palettised BMP图像(我猜你的意思):

$im = new imagick('input.bmp');
$im->quantizeImage(256,Imagick::COLORSPACE_RGB,0,false,false);
$im->writeImage('result.bmp');

这将有256种颜色的调色板(每一个8位红色,加上8位绿色,加上8位蓝色),每个像素将由其在该调色板中的索引表示。

以上是关于ImageMagick:无法将24位bmp图像转换为8位bmp图像的主要内容,如果未能解决你的问题,请参考以下文章

ImageMagick:将图像转换为 A4 页面大小的 PDF,图像适合页面

如何使用 MFC 将 24 位彩色图像转换为二进制图像?

用c语言读取24位位图bmp文件

Ico 格式 - 32 位 PNG 与 32 位 BMP 与 24 位 BMP

iOS:将 png 图像转换为 1 位 bmp 图像

八叉树算法将24位bmp图像转变为8位彩色图像