4

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」が選択されています。

何か案は?ありがとう!

4

2 に答える 2

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つのコロのみが含まれていることを示していますが、画像にはインデックス付きの色のテーブルがありません。

于 2013-06-18T14:38:18.233 に答える
0
    my $image = Image::Magick->new;
    $image->Read($imagePath);
    $image->Quantize(colorspace=>"gray"):
    $image->Set(density => '72x72');

この例はperlで書かれており、簡単にphpに変換できます...

于 2012-11-19T08:30:38.807 に答える