by ryou

PhotoshopのWEB書き出しのPNG24で透明化チェックを付けていても、透明なピクセルが無ければアルファチャンネルを作らない

かなりどうでもいい知識だけど、タイトルの通り。かなり雑文。

結論

タイトルの通り。

検証方法として、ImageMagickインストールしてidentifyコマンドでPhotoshopから吐き出したPNG24(透明ピクセル無し)とPNG24(透明ピクセル有り)を見てみた。

PNG24(透明ピクセル無し)

% identify -verbose png24.png
Image: png24.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 3456x5184+0+0
  Units: Undefined
  Type: TrueColor
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    Red: 8-bit
    Green: 8-bit
    Blue: 8-bit
  Channel statistics:
    Pixels: 17915904
    ~

上記の通り、Channnel depthの項目にAlphaが存在しない(透明化チェックボックスはONにしています)

PNG24(透明ピクセル有り)

% identify -verbose png24.png
Image: png24.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 3456x5184+0+0
  Units: Undefined
  Type: TrueColorAlpha
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    Red: 8-bit
    Green: 8-bit
    Blue: 8-bit
    Alpha: 8-bit
  Channel statistics:
    Pixels: 17915904

こっちはAlphaが存在する。

必要のない処理はしないというのは考えてみれば当然だけど、見て「なるほどやっぱりそうか」って納得したので。

zipファイルに関して気になって調べた時もversion needed to extractフィールドが中身空のテキストファイルをzipした際には10(無圧縮)ってなってて、そっちも同様になるほどそりゃそうだと思ったりした記憶があります。

そこに至るまで

PNG軽量化の減色と圧縮について | GREE Engineers’ Blog

PNGの圧縮アルゴリズムってどんなんだったかなって気になって検索してたら上の記事に当たったんですけど、そこで「PNGはRGBからIndexed Colourに変換して減色している」って書いててびっくりしたんですよね。PNGは完全に無劣化だと思ってたので、減色処理をしているなら劣化しないはずがないので。

で色々調べて見て、これ多分PNG8の事を指してるんだなと。2012年の記事だし、当時自分はWEB界隈で仕事をしてなかったので詳しくないんですが、その頃はPNG8が主流だったのかもしれない。

で、そこから「そもそもPNG8,24,32の違いはなんだっけ」とか調べだして、PNGファイルを右クリックして情報見てもどのタイプのPNGかわかんねーなってなって、ImageMagickのIdentifyコマンドで詳細が見れるって知ってPhotoshopから書き出したファイルを見てみたらタイトルの事に気づいた。

参考

PNG軽量化の減色と圧縮について | GREE Engineers’ Blog

呑みながらでもわかる! これくらいなら知っておきたい「PNGのしくみ」 | OPTPiX Labs Blog

1分でわかるPNG8,PNG24,PNG32を判別する方法 | iwb.jp