Linux で PNG の透明な背景色を調べる

Linux で PNG の透明な背景色を調べる

PNG ファイルには、透明なピクセルの背景色情報が含まれているようです。この画像を間違った設定でテクスチャとして使用すると、このことが顕著になることがあります。

Linux (理想的にはコマンドライン) で PNG ファイル内の透明ピクセルの色を確認する方法を教えてください。

答え1

背景色は PNG の「bKGD」チャンクを介して伝達されます。

コマンドラインから「pngcheck -v」を使用できます。pngcheckをここからダウンロードしてインストールします。

http://www.libpng.org/pub/png/apps/pngcheck.html

次に入力

pngcheck -v file.png

PNG ファイルに bKGD チャンクが存在する場合、pngcheck の出力には次のような内容が含まれます。

オフセット 0x000a0、長さ 6 のチャンク bKGD 赤 = 0x00e0、緑 = 0x00e0、青 = 0x0080

おそらくImageMagick(バージョン6.6.9以降)をすでにお持ちでしょうから、次のように入力することでbKGDチャンク情報やその他の多くの情報も取得できます。

identify -verbose file.png

そして探す

背景色: srgba(224,224,128,1)

png:bKGD: チャンクが見つかりました (上記の背景色を参照)

「背景色」のみが表示され、「png:bKGD:...」が表示されない場合は、identify は ImageMagick のデフォルトの背景色を報告しており、PNG ファイルには bKGD チャンクが存在しません。

答え2

PNG仕様(リンク) は、透明性情報が格納される tRNS チャンクを記述します。

ソフトウェアライブラリlibpng透明度情報を含む PNG ファイルを読み書きできます。具体的には、次の関数を調べてください。

png_get_tRNS(png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color)

関連情報