2017-01-10 165 views
1

我的编程平台是:ImageMagick的:在24位BMP图片不能转换为8位BMP图像

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

我的代码:

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

然后image_out把仍然是24位bmp图像。

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

+0

请张贴一个你想要从ImageMagick中得到的类型的8位图像 - 看起来你的想法是一个8位图像不符合我的:-) –

回答

1

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'); 
+0

即使我遵循了你的建议。它不工作。我的输出图像仍然是24位bmp。 – Cuongvn08

+0

你可以上传这些图片吗?这样我们可以测试它吗? – NID

1

可以强制8位码垛BMP图像(这是我想你的意思)是这样的:

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

这将有一个调色板256色(每一个8位红色,加上8位绿色,再加上8位蓝色),每个像素将由其索引代表该调色板。

+0

最好请求255种颜色,在“背景颜色”的调色板中留出空间,如果该颜色不在所产生的量化调色板中,则占用一个条目。 –

+0

这不适合我。我的输出图像仍然是24位bmp。 – Cuongvn08