我正在尝试使用PHP(版本:5.2.13)和ImageMagick(版本:6.7.8-7-Q16)以编程方式将位图RGB图像转换为1位灰度(b / w)位图图像。输入图像是位图,通过ImageMagick函数生成:
bool Imagick::setFormat ( string $format )
其中$ format ='bmp2'
以下代码过去曾用过(旧版本的ImageMagick ......不记得哪一个),但它在当前环境中不再起作用了:
private function monochrome() {
if (isset($this->image)) {
try {
// reduce image colors to 2 (black and white)
$this->image->quantizeImage(2, Imagick::COLORSPACE_GRAY, 5, false, true);
// reduce image depth to 1 bit per pixel
$this->image->setImageDepth(1);
$this->image->setImageChannelDepth(Imagick::CHANNEL_ALL, 1);
// set image type to monochrome (2 colors: black and white only)
$this->image->setImageType(Imagick::IMGTYPE_BILEVEL);
}
catch (ImagickException $ie) {
throw $ie;
}
}
else {
throw new Exception("No image object");
}
}
问题是所产生的图像仍然在RGB色彩空间中。
我也尝试过:
$this->image->setImageColorSpace(Imagick::COLORSPACE_GRAY);
但结果不会改变。
我的目标是为签名捕获应用程序生成尽可能小的黑白位图图像。我知道有比位图更好的图像格式,但生成的图像必须与旧的Access 97兼容。这就是为什么'bmp2'是图像格式的选择。
有什么想法吗?谢谢!
答案 0 :(得分:3)
我只做这个,它会创建一个黑白图像:
$im = new Imagick();
$im->readimage($filename);
$im->resizeimage($width, $height, Imagick::FILTER_UNDEFINED, 1, false);
$im->posterizeimage(2, false);
$im->writeimage($filename.".bmp");
它会创建一个标识为:
的图像$ identify example.png.bmp
example.png.bmp BMP 1742x236 1742x236+0+0 1-bit PseudoClass 2c 52.1KB 0.000u 0:00.000
2c说它只包含2个colos,但是hte图像没有索引的颜色表。
答案 1 :(得分:0)
my $image = Image::Magick->new;
$image->Read($imagePath);
$image->Quantize(colorspace=>"gray"):
$image->Set(density => '72x72');
这个例子是用perl编写的,你可以很容易地把它转换成php ...