PNG
読み:ピン
外語:PNG: Portable Network Graphics
静止画像用の圧縮アルゴリズムおよび
画像ファイル
フォーマットの一つで、現在の主流。NASAのThomas Boutellによって開発が始められた。
目次
ファイル属性
概要
由来
標準化
特徴
利点
圧縮
色数
技術
RIFF
ファイルヘッダー
チャンク
主なチャンク
対応ソフトウェア
ファイル属性
種類:
画像ファイル
拡張子
: .png
MIMEタイプ名
:
image/png
ファイルタイプ: PNG
UTI
: public.png
マジックナンバー
: \x89PNG\x0d\x0a\x1a\x0a
コンテナー:
RIFF
風の独自フォーマット (画像、コメント等を格納可能)
開発者:
W3C
標準:
RFC 2083
、ISO 15948
拡張:
APNG
、
MNG
、
JNG
、PNS
概要
由来
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要素で利用できる。
再検索