PNG

読み:ピン
読み:ピング
外語:PNG: Portable Network Graphics 英語
品詞:名詞

静止画像用の圧縮アルゴリズムおよび画像ファイルフォーマットの一つで、現在の主流。NASAのThomas Boutellによって開発が始められた。

目次

由来

PNGは、従来のGIFで使われるデータ圧縮アルゴリズムLZW法がUnisys社の特許に接触し、自由に使えなくなったことから開発された。これは、Unisysが、LZWの特許を主張するというサブマリン特許問題を起こしたためである。

PNGはGIFの後継であるため、圧縮率を含め、あらゆる性能がGIFを上まわるように設計されている。

標準化

PNG 1.0の仕様RFC 2083でInformational(情報提供)扱いで公開され普及が始まり、やがてISO/IEC 15948として国際標準化された。

  • 1996(平成8)年10月1日: PNG Specification, version 1.0がW3C勧告として承認
  • 1997(平成9)年3月: PNG Specification, version 1.0のRFC 2083発行
  • 1998(平成10)年12月31日: PNG Specification, version 1.1リリース
  • 1999(平成11)年8月11日: PNG Specification, version 1.2リリース
  • 2003(平成15)年11月10日: 国際標準化 (ISO/IEC 15948:2003)
  • 2004(平成16)年3月3日: 国際標準化 (ISO/IEC 15948:2004)

現在の最新版はISO/IEC 15948:2004である。規格書は英語で、価格はCHF180(およそ1万5000円)と、比較的高価である。

利点

GIFと比べ、次のような特徴がある。

  • 色数はフルカラーに対応 (48ビット色、約280兆色)
  • 圧縮技術の変更 (可逆圧縮のzlib)
  • 複数の透明属性(アルファチャンネル)を持てる(GIFは1色だけ)
  • ガンマ補正のパラメーターを持つことができる
  • CRCによりファイルが正常か破損しているかを判断できる
  • ファイル形式にRIFFに似たチャンク形式フォーマットを採用

圧縮

PNGは、ファイルヘッダーに圧縮方式を表わす領域が存在し、様々なものが選択可能な仕様となっている。

ただし、実際には可逆圧縮でライセンスフリーのzlibのみが使われている。

これは、GIFの代替であって、JPEGファイル(JFIF)の代替ではないからである。zlibの圧縮率は必ずしも最良ではないが、これによるライセンス料の徴収がないという点がPNGの誕生経緯における最大の特徴だった。それでもGIFが用いているLZWよりは良い圧縮率を示すことが多い。

色数

最大色数は1ピクセルあたり48ビット色(約280兆色)で、RGB各色65,536階調まで対応する。GIFの8ビット(256色)から大幅に拡張された。

また、1ピクセルあたり最大16ビットのグレイスケール(白黒)画像に対応する。黒から白までを65,536段階に表現できる。

多色対応のフルカラー画像ファイルフォーマットにJPEG(JFIF)があるが、PNGは画像の劣化が許されないような場合や図表などに使うことができる。

RIFF

GIFファイルは独自のファイル形式を持っていたが、PNGはRIFFチャンク形式を採用し、汎用性や拡張性も高い。

例えばMacromediaのHTML制作ソフトFireworksは、このPNGに独自のRIFFチャンクを追加したものを保存形式に使用しているほどである。もちろん、このFireworksで作ったPNGは他のソフトでは普通のPNG画像ファイルとして利用できる。

ファイルヘッダー

PNGは、送信時の破損を確認する機能を持った独特のシグネチャ(マジックナンバー)をファイルの先頭に付けている。

0x89 "PNG" 0x0d 0x0a 0x1a 0x0aという8バイトのデータ列は、それぞれに意味がある。

0x89

通信経路が8ビットを通すかどうかをチェックする、MSBが1になったバイト。

ISO-646 C1制御コードとしては8/9 HTJ(CHARACTER TABULATION WITH JUSTIFICATION)というテクストファイルには使わない制御文字で、テクストファイルが誤ってPNGと認識されないように保護する機能もある。

"PNG"
このファイルがPNGであることを表わす文字列。
0x0d 0x0a
MS-DOS形式の改行コード。通信経路(DOS→UNIX)でコード変換が行なわれていないことを確認する。
0x1a
MS-DOSにおけるEOFコードで、DOSからTYPEコマンドで表示した時、ここで止め、画面が乱れないようにする。
0x0a
UNIX形式の改行コード。通信経路(UNIX→DOS)でコード変換が行なわれていないことを確認する。

他にも応用できそうな、非常に特徴的かつ効果的なデータ列となっている。

また、PNGファイルは必ずIHDRチャンクから始まるので、この次の8バイトは、常に00 00 00 0D 49 48 44 52となる。これも認識に使用できる。

チャンク

PNGは、チャンクと呼ばれる構造を入れ子にした形式のファイルである。

チャンクは、常に次の構造を取る。

  • 4バイト ‐ チャンクサイズ(ビックエンディアン)
  • 4バイト ‐ チャンクの種類(ASCII文字列)
  • nバイト ‐ データ
  • 4バイト ‐ データのCRC-32

チャンクの種類は4文字のASCIIで表わされる。英字には大文字と小文字があるが、チャンク名はこの大文字と小文字に意味を持たせており、次のように使っている。

  • 1文字目 ‐ 大文字なら必須チャンク。必須チャンクは解読に必要な情報を含み、デコーダーが認識不能な必須チャンクにぶつかった場合は停止しなければならない。
  • 2文字目 ‐ 大文字でパブリックチャンク(公開チャンク)、小文字でプライベートチャンク。パブリックチャンクは仕様が公開されている。
  • 3文字目 ‐ 常に大文字とする。
  • 4文字目 ‐ チャンクの複写性。小文字ならそのまま複写して使えるが、大文字ならファイルやチャンク固有の情報を含むためそのまま複写できない。

主なチャンク

よく使われるチャンクに、次のようなものがある。

  • 標準必須チャンク(Standard Critical Chunks)
    • IHDRチャンク (イメージヘッダー)
    • PLTEチャンク (パレット)
    • IDATチャンク (画像情報)
    • IENDチャンク (画像の終端)
  • 標準補助チャンク(Standard Ancillary Chunks)
    • cHRMチャンク
    • gAMAチャンク
    • iCCPチャンク
    • sBITチャンク
    • sRGBチャンク
    • bKGDチャンク
    • hISTチャンク
    • tRNSチャンク
    • pHYsチャンク
    • sPLTチャンク
    • tIMEチャンク
    • iTXtチャンク
    • tEXtチャンク
    • zTXtチャンク
  • 追加公開チャンク(Additional Public Chunks)
    • oFFsチャンク
    • pCALチャンク
    • sCALチャンク
    • gIFgチャンク
    • gIFtチャンク
    • gIFxチャンク
    • fRAcチャンク
  • 私用チャンク

標準補助チャンクは、必須チャンクに対して置かれる位置が決められているものがある。例えばtRNSチャンクは、PLTEチャンクの後で、かつIDATチャンクの前でなければならない。

対応ソフトウェア

Internet Explorerは4.0以降で対応を開始した。

Netscape Communicatorではそれに少し遅れて4.04以降でサポートされた(ただし、Windows 3.1版のNetscape Navigatorを除く)。

他にもMacMosaicやXMosaicなどでサポートされ、今では殆ど全てのWebブラウザーで対応されている。

HTML等からは、GIFやJPEGと同様にimg要素で利用できる。

関連するリンク
W3C 仕様書
PNG Home Site
用語の所属
画像ファイル
関連する用語
MNG
zlib
JPEG
GIF
LZW
tRNSチャンク

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club