質問: **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%として扱えます。