2012-09-17 11 views
5

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

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

(詳細はHow to check a PNG for grayscale/alpha color type?を参照してください)

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

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

ここに、私が意味するものを示すために、さまざまなグレースケールイメージのいくつかのサンプルがあります。それらはすべて同じように見えますが、PhotoShopでそれらを開き、Image - > Modeの設定を見ると、違いがわかります。また、進エディタは26バイトの差を明らかにする:

RGB RGB、カラータイプ2、3149バイト
RGB palette RGBパレット、カラータイプ3、3971バイト
True Grayscale Image真のグレースケール画像、カラータイプ0、1105バイト< - これは私が必要なものです


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

これまでのコードはどのようになっていますか? – Breezer

+0

@Breezer:私のOPの "UPDATE 01"を参照してください。 – Jpsy

+0

私はあなたがhttp://php.net/manual/en/function.imagecolorallocate.phpを探していると思っています 私はこのチュートリアルが道に沿って助けてくれると思います。http://php.about.com/od /gdlibrary/ss/grayscale_gd.htm – Breezer

答えて

5

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

あなたはリファレンスがありますか? – Xeoncross

+0

ソースからの@Xeoncross https://bitbucket.org/pierrejoye/gd-libgd/src - RGBおよびTrueColor *出力のみサポートしています。 – h0tw1r3

+0

@ h0tw1r3:それはそれです - ありがとう!補足として:私は、ターゲットマシン上でGraphicsMagickにアクセスできる限り、ImageMagickを再び使用しないことを約束しました。幸いにもh0tw1r3のコードは、 '' Imagick''を '' Gmagick''(あるいはGraphicsMagick PHP拡張モジュールをインストール)で置き換えれば、GMと完全に機能します。 – Jpsy

関連する問題