PNG に新しいチャンク形式を追加することを認めるためにはすべてのチャンク形式の順序の必要条件についての規則を確立する必要があります。さもなければ、PNG を編集するプログラムは未知のチャンクに出会ったときどうすればよいの知ることができません。
我々は「PNG エディタ」を PNG ファイルの更新を行い、ファイルの補助情報をできる限り保全しようとするプログラムと定義しています。PNG エディタの2つの例としてテキストチャンクを追加したり修正したりするプログラムや、トゥルーカラーの PNG ファイルに推奨パレットを追加するプログラムがあげられます。この意味で普通のイメージエディタは PNG エディタではありません。なぜなら、それらはイメージを読み込む時に認識できない情報を切り捨てることがあるからです。(注意:プログラムは PNG ファイルについてできる限り補助情報を保全するように扱うことが強く推奨されます。)
あり得る問題の例としては、複写安全で PLTE が存在するときは PLTE の後に現れる必要のある仮想的な新しい補助チャンク形式が考えられます。推奨する PLTE を追加するプログラムがこの新しいチャンクを認識しないとき、PLTE は新しいチャンクの後ろのような間違った場所に挿入されてしまうかもしれません。このような問題を予防するために PNG エディタがすべての未知のチャンクを破棄するようにすることもできますが、見栄えのよくない解決です。その代わりに、PNG は補助チャンクがこのような順序の制約をもたないことを必要としています。
将来の拡張を許すことによるこのタイプの問題を予防するために、我々は PNG エディタの動作とチャンクに対して許される順序の必要条件の両方にいくつかの制約を課しました。
PNG エディタに対する規約は:
複写して安全ではない未知の補助チャンクを複写するときは、PNG エディタはほかの必須チャンクとそのチャンクの関係を移動してはいけません。同じ必須チャンクの対の間に現れる他の補助チャンクとの関係は自由に移動する事ができます。(これは、必須チャンクが複写して安全ではなく保護される未知のチャンクだったときエディタは追加、削除、修正、並べ替えをしてはいけないために定義できます)
複写して安全な未知の補助チャンクを複写するときは、PNG エディタは IDAT の前から IDAT の後に、またその逆でもそのチャンクを移動してはいけません。(これは、IDAT は常に存在することから定義できます)。このほかの並べ替えは認められます。
既知の必須チャンク形式を複写するときは、エディタはそのチャンク形式のために存在しているチャンクの順序の規則の指定のみを尊重する必要があります。しかし、上記の一般的な規則を適用することを代わりに選択することも常にできます。
PNG エディタは未知の必須チャンク形式に出会ったならばあきらめる必要があります。なぜなら、そのようなチャンクを含むファイルを変更して正当なファイルが確実かどうか決してわかりません。(それはほかのチャンクを解釈するための未知の意味をもつかもしれませんので、ただ単純にそのチャンクを破棄するだけでは十分ではないことに注意してください)
これらの規約は入力ファイルから出力ファイルへのチャンクの複写に関して言い表していますが、PNG ファイルがその場で修正された場合は明白に適用されています。
Chunk naming conventions も参照してください。
補助チャンク形式の順序の規則はこれ以上厳しくはできません:
複写すると危険なチャンクは必須チャンクとの関係の必要条件を持つことができます。
複写して安全なチャンクは IDAT との関係の必要条件を持つことができます。
特殊な補助チャンク形式に対する実際の順序の規約は弱くなるかもしれません。標準的な補助チャンク形式に対する順序の規約の例を参照してください(Summary of standard chunks)。
デコーダはチャンクの順序の規約によって規定された以上の補助チャンクの位置取りに関する仮定を行ってはいけません。とくに、特定の補助チャンク形式がほかの補助チャンクと特定の位置関係に現れるような仮定は決してできません。(たとえば、あなたのプライベートな補助チャンクが IEND の直前に現れるように仮定すると危険です。たとえ、あなたのアプリケーションがそれをいつもそこに書き込んだとしても、PNG エディタはその後ろにほかの補助チャンクを挿入するかもしれません。しかし、あなたのチャンクが IDAT と IEND の間のどこかにあると仮定することは安全です)。
必須チャンクは自由な順序の必要条件を持つことができます。なぜなら、PNG エディタは未知の必須チャンクに出会ったときあきらめる必要があるからです。たとえば、IHDR は常に最初に現れるという特別な順序の規則を持っています。PNG エディタもしくは、PNG 書き込みプログラムは、必須チャンクの発行する順序の規則を知り、従う必要があります。