RFC: 2083
Statut : Proposition
Retour à l'index des normes : INDEX FRANCAIS
Dans le but de permettre l'enregistrement de nouveaux types de blocs dans le format PNG, il est nécessaire d'établir des règles d'ordonnancement pour tous les types de blocs. Autrement, un éditeur PNG pourrait ne pas savoir quoi faire d'un bloc inconnu.
Nous appellerons "Editeur PNG" un programme susceptible de modifier un fichier PNG, tout en essayant de préserver le maximum d'informations auxiliaires qui lui sont rattachées. Deux exemples d'éditeurs PNG seraient un programme qui permet la modification des bloc textuels, et un programme qui ajoute une palette suggérée à un fichier PNG en vraies couleurs. Habituellement, des éditeurs graphiques ne seront pas forcément des éditeurs PNG car ils jettent souvent les informations auxiliaires pour ne s'intéresser qu'à l'image. (Note: nous recommandons fortement que les programmes traitant le format PNG préservent ces informations auxiliaires chaque fois que possible).
Un exemple de problème possible est le cas d'un nouveau bloc auxiliaire hypothétique, sûr à la copie, et défini comme devant apparaître après le bloc PLTE s'il existe. Si notre programme destiné à ajouter un bloc PLTE est incapable de reconnaître ce nouveau bloc, il pourrait insérer la palette PLTE au mauvais endroit, c'est à dire après le nouveau bloc. Nous pourrions prévenir ce problème en demandant à tous les éditeurs PNG d'éliminer tous les blocs non reconnus, mais cette solution est très limitative. Au lieu de cela, PNG exige qu'il n'y ait pas de restrictions de ce type sur l'ordre des blocs auxiliaires.
Pour éviter un problème de ce type, et continuer à pouvoir étendre le format de façon cohérente, nous avons introduit quelques contraintes sur les éditeurs PNG et l'ordre des blocs.
Les règles définies pour les éditeurs PNG sont les suivantes :
Ces règles sont édictées dans une situation où le programme modifie un fichier d'entrée pour produire un fichier de sortie (notion de copie de blocs), mais sont évidemment valables lorsque la modification est faite "en place". Cf aussi Conventions d'appellation des blocs (Section 3.3).
Les règles pour ordonner les blocs auxiliaires ne pourront jamais être plus strictes que les suivantes :
Voir par exemple les règles d'ordonnancement des blocs auxiliaires prédéfinis (Résumé à propos des blocs prédéfinis, Section 4.3).
Les décodeurs en aucun cas supposer quoi que ce soit de plus sur la position probable d'un bloc auxiliaire. En particulier, il sera impropre de supposer qu'un bloc auxiliaire a forcément une position définie par rapport à un autre bloc auxiliaire. (Par exemple, il est dangereux d'affirmer que votre bloc privé se situe forcément avant le dernier bloc IEND. Même si votre application l'écrit bien toujours à cette place, rien n'interdit à un éditeur PNG d'insérer un nouveau bloc auxiliaire après le vôtre. La seule chose sûre est que votre bloc est bien située entre le dernier IDAT et le bloc IEND).
Les blocs critiques peuvent avoir des contraintes arbitraires, dans la mesure où les éditeurs PNG ne pourront effectuer aucune modification si un bloc critique de nature inconnue est détecté. Par exemple, la règle spéciale pour le bloc IHDR est qu'il doit toujours apparaître en premier. Un éditeur PNG, et bien sûr tout programme écrivant des fichiers PNG, doit connaître et suivre toutes les règles associées aux blocs critiques qu'il est sensé écrire.