使用PHP和ImageMagick以编程方式将RGB图像转换为1位灰度(b / w)位图图像

开发技术 作者: 2024-07-02 02:45:01
我正在尝试使用 PHP(版本:5.2.13)和ImageMagick(版本:6.7.8-7-Q16)以编程方式将位图RGB图像转换为1位灰度(b / w)位图图像.输入图像是位图,通过ImageMagick函数生成: bool Imagick::setFormat ( string $format ) 其中$format =’bmp2′ 以下代码过去曾用过(旧版本的ImageMagick ……不记
我正在尝试使用 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’是图像格式的选择.

有任何想法吗?谢谢!

解决方法

我只做了这个,它创建了一个黑白图像:

$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图像没有索引的颜色表.

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_37054.html