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
(たとえば)の値はA7
while $rgba
is[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 ファイル形式に変換します。しかし、それでも画像エラーが発生しました。