6

PHP を使用して 16 ビット (グレースケール) カラー PNG を RGBA4444 カラー形式に変換する方法はありますか?

-また-

RGBA4444 形式を使用して、この 16 ビット グレースケール PNG を読み込む方法はありますか?

PNG ヘッダーには、16 ビット カラー (ビット深度) とグレースケール カラー (カラー タイプ) が使用されていることが示されています ( http://www.fileformat.info/format/png/corion.htm、IHDR イメージ ヘッダー)。

$rgb = imagecolorat($src, $x, $y);
var_dump("RGB - ".dechex($rgb));
$rgba = imagecolorsforindex($src, $rgb);
var_dump("RGBA - ".dechex($rgba));

$rgb(たとえば)の値はA7while $rgbais[A7, A7, A7, 0]です。

ところで、ここに上記のファイルのヘッダーがあります:

89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 | .PNG........IHDR
00 00 03 FF 00 00 03 FF 10 00 00 00 00 E3 F9 FF | ................
C9 00 00 00 0D 74 45 58 74 44 46 4D 54 00 52 34 | .....tEXtDFMT.R4
47 34 42 34 41 34 E0 94 BA 92 00 00 20 00 49 44 | G4B4A4........ID
41 54 .. ..                                     | AT

編集:

私が最初にしたことは、Charlie によるこのコード ( https://stackoverflow.com/a/7293429/2205703 ) に従うことでした。(もちろん多少の変更はあります。)次に、各 16 ビット カラー フォーマット (tEXtチャンクに基づく) を RGBA8888 フォーマットに変換します。

次に、pack()それらを PNG ファイル形式に変換します。しかし、それでも画像エラーが発生しました。

4

1 に答える 1

2

ブラッドの答えは悪くない。グレースケール画像では、8 ビットに切り捨てれば十分です。RGBA は、おそらく実際に探しているものではない透明な画像になります。すでにフルカラーの 24 ビット イメージに変換しようとしましたか? 結果はまだグレースケールのように見えますが、簡単に8ビットに減らすことができます.

imagick を使用すると、この手順がはるかに簡単になります。

convert source-image.png -evaluate multiply 16 -depth 8 destination-image.png
于 2013-03-30T09:41:25.843 に答える