PNG24(透過) と PNG8(アルファチャネル)について

投稿者: Anonymous

Q1.PNG24について
PNG24:24ビットカラー
PNG32:24ビットカラー+8ビットアルファチャンネル
と思っていたのですが、下記はどういう意味ですか?

png24
png8同様に情報がない部分は透過処理が可能

  • 24ビットカラー内(使用していない部分)にアルファチャンネルが含まれる。
    透明度%指定できる

  • 24ビットカラー内(使用していない部分)に透過が含まれる。
    透明度%指定できない

  • アルファチャンネルつきPNG-24の意味


Q2.PNG8について

PNG8(アルファチャネル)

どういう意味ですか?

  • 8ビットカラー内(使用していない部分)にアルファチャンネルが含まれる。
    透明度%指定できる

  • アルファチャンネルつきPNG-8の意味


Q3.そもそも

  • 24ビットカラー+8ビットアルファチャンネル を何と呼ぶ?

24bitカラーにαチャネル8bitを加えたものを32bitカラーとは呼ばない


< 追記 >
下記認識で合っていますか?

  • alphaチャンネルがある場合
    透明度%指定できる
    何色でも(半)透明にできる

  • alphaチャンネルがない場合
    透明度%指定できない
    何色透明にできるかはPNGのカラータイプによって異なる
    ※tRNSチャンクで透過色を指定する

解決

Q1.PNG24について
PNG24:24ビットカラー
PNG32:24ビットカラー+8ビットアルファチャンネル

慣例的には 上記の通りの解釈です。PNG公式サイトFAQより部分引用します:

Q. What are "PNG8" and "PNG24"?
A. PNG24, on the other hand, is shorthand for "24-bit PNG" and refers to truecolor or RGB (red/green/blue) images. Each pixel in such images is 24 bits (3 bytes) deep and directly specifies a color instead of acting as an index into a lookup table of colors (i.e., a palette). […]

[…] However, when tools occasionally mention PNG32, they are invariably referring to 32-bit RGB+alpha (RGBA), not 32-bit gray+alpha. […]

言及先サイトの説明は、かなり簡略化された(もしくは無理解による誤った)説明になっているようです。

24ビットカラー内(使用していない部分)にアルファチャンネルが含まれる。透明度%指定できる
24ビットカラー内(使用していない部分)に透過が含まれる。透明度%指定できない

24ビットカラー=8bit-Truecolour(IHDRチャンクColourType=2)と仮定した場合、tRNSチャンクで"透明色"を1つだけ指定できます。透明度は100%固定です。

アルファチャンネルつきPNG-24の意味

おそらく 8bit-Truecolour+透明色指定 のことを指すと考えられます。この場合、任意の透明度指定ではなく、透明色を1つ指定できるだけです。


Q2.PNG8について
PNG8(アルファチャネル)
どういう意味ですか?
アルファチャンネルつきPNG-8の意味

PNG仕様上は直接対応するものが存在しませんが、8bit-IndexedColour(IHDRチャンクColorType=3)+tRNSチャンクによる透過パレット指定 を指す可能性が高いです。

8ビットカラー内(使用していない部分)にアルファチャンネルが含まれる。透明度%指定できる

概ね実現可能です。tRNSチャンクで透過パレットを指定する際、そのパレットインデックスがアルファ値として扱われます。


Q3.そもそも
24ビットカラー+8ビットアルファチャンネル を何と呼ぶ?
24bitカラーにαチャネル8bitを加えたものを32bitカラーとは呼ばない

(個人の主義主張はさておき)PNG公式サイトFAQによれば、PNG32=「24ビットカラー+8ビットアルファチャンネル」を指すことが一般的のようです。


追記への回答

下記認識で合っていますか?

alphaチャンネルがある場合
透明度%指定できる
何色でも(半)透明にできる

正しい認識です。

alphaチャンネルがない場合
透明度%指定できない
何色透明にできるかはPNGのカラータイプによって異なる
※tRNSチャンクで透過色を指定する

一部不正確です。場合分けをすると下記の通りです:

  • Alphaチャネル無しGrayscale:ある1色(Gray値)を透明色(alpha=0)として指定できます。
  • Alphaチャネル無しTruecolour(RGB):ある1色(RGB値)を透明色(alpha=0)として指定できます。
  • Alphaチャネル無しIndexedColour(パレット方式):複数のパレットインデックスを指定できます。パレットインデックス値そのものがalpha値として扱われるため、例えばパレットインデックス=128を指定すると透明度50%として扱えます。
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *