PNG (Portable Network Graphics) Specification, Version 1.2


Previous page
Next page
Table of contents

7. チャンクの順序規則

PNG に新しいチャンク形式を追加することを認めるためにはすべてのチャンク形式の順序の必要条件についての規則を確立する必要があります。さもなければ、PNG を編集するプログラムは未知のチャンクに出会ったときどうすればよいの知ることができません。

我々は「PNG エディタ」を PNG ファイルの更新を行い、ファイルの補助情報をできる限り保全しようとするプログラムと定義しています。PNG エディタの2つの例としてテキストチャンクを追加したり修正したりするプログラムや、トゥルーカラーの PNG ファイルに推奨パレットを追加するプログラムがあげられます。この意味で普通のイメージエディタは PNG エディタではありません。なぜなら、それらはイメージを読み込む時に認識できない情報を切り捨てることがあるからです。(注意:プログラムは PNG ファイルについてできる限り補助情報を保全するように扱うことが強く推奨されます。)

あり得る問題の例としては、複写安全で PLTE が存在するときは PLTE の後に現れる必要のある仮想的な新しい補助チャンク形式が考えられます。推奨する PLTE を追加するプログラムがこの新しいチャンクを認識しないとき、PLTE は新しいチャンクの後ろのような間違った場所に挿入されてしまうかもしれません。このような問題を予防するために PNG エディタがすべての未知のチャンクを破棄するようにすることもできますが、見栄えのよくない解決です。その代わりに、PNG は補助チャンクがこのような順序の制約をもたないことを必要としています。

将来の拡張を許すことによるこのタイプの問題を予防するために、我々は PNG エディタの動作とチャンクに対して許される順序の必要条件の両方にいくつかの制約を課しました。

7.1. PNG エディタの動作

PNG エディタに対する規約は:

これらの規約は入力ファイルから出力ファイルへのチャンクの複写に関して言い表していますが、PNG ファイルがその場で修正された場合は明白に適用されています。

Chunk naming conventions も参照してください。

7.2. 補助チャンクの順序

補助チャンク形式の順序の規則はこれ以上厳しくはできません:

特殊な補助チャンク形式に対する実際の順序の規約は弱くなるかもしれません。標準的な補助チャンク形式に対する順序の規約の例を参照してください(Summary of standard chunks)。

デコーダはチャンクの順序の規約によって規定された以上の補助チャンクの位置取りに関する仮定を行ってはいけません。とくに、特定の補助チャンク形式がほかの補助チャンクと特定の位置関係に現れるような仮定は決してできません。(たとえば、あなたのプライベートな補助チャンクが IEND の直前に現れるように仮定すると危険です。たとえ、あなたのアプリケーションがそれをいつもそこに書き込んだとしても、PNG エディタはその後ろにほかの補助チャンクを挿入するかもしれません。しかし、あなたのチャンクが IDATIEND の間のどこかにあると仮定することは安全です)。

7.3. 必須チャンクの順序

必須チャンクは自由な順序の必要条件を持つことができます。なぜなら、PNG エディタは未知の必須チャンクに出会ったときあきらめる必要があるからです。たとえば、IHDR は常に最初に現れるという特別な順序の規則を持っています。PNG エディタもしくは、PNG 書き込みプログラムは、必須チャンクの発行する順序の規則を知り、従う必要があります。


Previous page
Next page
Table of contents