6

PHP でグレースケール画像を作成する必要があります。パレットにグレースケール値を持つインデックス付き画像についてではなく、真のグレースケール画像について話しています。違いは、PNG (カラー タイプ) の 26 番目のバイトにあります。

0 - greyscale  <-- THIS IS WHAT I NEED
2 - RGB
3 - RGB with palette
4 - greyscale + alpha
6 - RGB + alpha

(詳細については、PNG のグレースケール/アルファ カラー タイプを確認する方法を参照してください)

私も試しimagefilter($im, IMG_FILTER_GRAYSCALE);てみましたimagetruecolortopalette($im, false, 255);が、得られるのはRGBグレースケール画像(カラータイプ2)またはグレースケールパレットを使用したRGBパレット画像(カラータイプ3)のいずれかです。imagecreate()の代わりに画像を初期化しようとしましたimagecreatetruecolor()が、これもパレット画像にしかつながりません。

PHP の GD 関数 (または PHP の他の関数) を使用してカラー タイプ 0 のグレースケール PNG を作成する方法はありますか?

私が言いたいことを示すために、さまざまなグレースケール画像のサンプルをいくつか示します。それらはすべて同じように見えますが、PhotoShop でそれらを開いて [画像] -> [モード] 設定を見ると、違いがわかります。また、16 進エディタは 26 番目のバイトの違いを明らかにします。

RGBRGB、カラー タイプ 2、3149 バイト
RGB パレットRGB パレット、カラー タイプ 3、3971 バイト
真のグレースケール イメージ真のグレースケール イメージ、カラー タイプ 0、1105 バイト <-- これが必要なもの


更新 01:

PNG を作成するために使用する基本的なコードを次に示します。コメント行は、私が試した代替手段です。

//$im = imagecreate($image_size, $image_size);
$im = imagecreatetruecolor($image_size, $image_size);

//imagefilter($im, IMG_FILTER_GRAYSCALE);
//imagetruecolortopalette($im, false, 255);

imagepng($im, $imgPathName);
imagedestroy($im);
4

1 に答える 1

6

GDライブラリは、「真の」グレースケールへの変換をサポートしていません。RGBとTrueColor*のみをサポートします。

PHPのGD関数(またはPHPの他の関数)を使用してカラータイプ0のグレースケールPNGを作成する方法はありますか?

ImageMagickはあなたが探しているものです。

$im = new Imagick();
$im->readImage('file.png');
$im->setImageType(Imagick::IMGTYPE_GRAYSCALE);
$im->writeImage('file.gray.png');
于 2012-09-17T18:03:21.780 に答える