Format Png du W3c

Cette section présente le format d'images Portable Network Graphics (PNG) du World Wide Web Consortium (W3C) utilisé par Up ! Portable Network Graphics.

Une image au format Portable Network Graphics (PNG) est encodée avec la convention de Motorola i.e. Big Endian.

La résolution est variable.

Les palettes de couleurs possibles sont noir et blanc, 16 couleurs, 256 couleurs, 65536 couleurs ou couleurs vraies.

Une image au format Portable Network Graphics (PNG) commence par la signature composée de huits octets de codes 137 80 78 71 13 10 26 10.

Blocs du flux Png

Le format Portable Network Graphics (PNG) est flux composé d'une succession de blocs caractérisés par un identifiant.

Voici les codifications des blocs gérés par :

IdentifiantDescription
En-têteEn-tête du fichier.
PalettePalette de couleurs de l'image.
ResolutionRésolution de l'image.
CouleurFondCouleur de fond de l'image.
CouleurTransparenteCouleur de transparence de l'image.
TexteTexte associé à l'image.
TerminateurTerminaison du fichier.

La première propriété du bloc est sa taille, ce qui permet de le sauter si son type n'est pas géré.

L'intégrité du contenu du bloc est calculé par un code de vérification i.e. CheckSum calculé d'après l'algorithme Cyclic Redundancy Check 32 (CRC32).

La dernière propriété du bloc est la valeur du code de vérification à recalculer et à comparer.

Bloc En-tête

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Taille4.Taille non signée du bloc - 21.
Type4.Etiquette du bloc - IHDR.
LargeurPixels4.Largeur non signée de l'image en pixels.
HauteurPixels4.Hauteur non signée de l'image en pixels.
ProfondeurPalette1.Profondeur de la palette.
Colorimetrie1.Colorimétrie.
MethodeCompression1.Méthode de compression - 0.
MethodeFiltrage1.Méthode de filtrage - 0.
MethodeEntrelacage1.Méthode d'entrelaçage.
CodeVerification4.Code de vérification.

Les valeurs possibles de ProfondeurPalette sont :

Les valeurs possibles de Colorimetrie sont :

Les valeurs possibles de MethodeEntrelacage sont :

Bloc Palette

Ce bloc peut être présent même pour une image en couleurs vraies pour préciser comment afficher l'image en mode dégradé.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Taille4.Taille non signée du bloc.
Type4.Etiquette du bloc - PLTE.
TableCouleursVariable.Table des couleurs.
CodeVerification4.Code de vérification.

La taille de la table des couleurs se déduit de la taille du bloc par soustraction de 8 octets. Cette taille doit être un multiple de trois octets.

Chaque couleur de la table est définie par trois octets pour la composante rouge, bleue et verte.

Bloc Donnees

Ce bloc est répété autant de fois que nécessaire parce ce que le flux des données de l'image peut être découpé arbitrairement.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Taille4.Taille non signée du bloc.
Type4.Etiquette du bloc - IDAT.
DonneesVariable.Données de l'image.
CodeVerification4.Code de vérification.

Bloc Resolution

Ce bloc est facultatif.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Taille4.Taille non signée du bloc - 17.
Type4.Etiquette du bloc - pHYs.
NbPixelsX4.Nombre non signé de pixels par unité en abscisse.
NbPixelsY4.Nombre non signé de pixels par unité en ordonnée.
Unite1.Unité de mesure.
CodeVerification4.Code de vérification.

Les valeurs admissibles pour la propriété Unite sont :

Bloc CouleurFond

Ce bloc est facultatif.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Taille4.Taille non signée du bloc.
Type4.Etiquette du bloc - bKGD.
CouleurFondVariable.Couleur de fond.
CodeVerification4.Code de vérification.

La propriété CouleurFond varie selon la valeur de la propriété Colorimetrie :

Bloc CouleurTransparente

Ce bloc est facultatif.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Taille4.Taille non signée du bloc.
Type4.Etiquette du bloc - tRNS.
CouleurTransparenteVariable.Couleur de transparence.
CodeVerification4.Code de vérification.

La propriété CouleurTransparente varie selon la valeur de la propriété Colorimetrie :

Bloc Texte

Ce bloc optionnel peut être répété.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
TailleVariable.Taille non signée du bloc.
Type4.Etiquette du bloc - tEXt.
SorteTexte80.Sorte du texte associé à l'image.
TexteVariable.Texte associé à l'image.
CodeVerification4.Code de vérification.

Les valeurs possibles de SorteTexte sont :

La taille de la propriété Texte se déduit de la taille du bloc en soustrayant 84 octets. La valeur de la propriété est encodée en Iso 8859 P1.

Bloc Terminateur

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Taille4.Taille non signée du bloc - 8.
Type4.Etiquette du bloc - IEND.
CodeVerification4.Code de vérification.

Enchaînement des blocs du flux Png

Voici la grammaire d'enchaînement des blocs dans le flux Png :

FluxPng :

PaletteOption : ListeContenus : Contenu :

Codage des pixels de l'image Png

Les lignes de pixels sont stockées du haut vers le bas de l'image.

Chaque ligne de pixels est précédée par un octet qui est le code de prédiction dont voici les valeurs :

Quand il existe plusieurs octets pour un pixel, parce qu'il existe plusieurs plans, alors les soustractions s'effectuent en fenêtre glissante de la sorte à toujours travailler sur le même type de plan - niveau gris, rouge, vert, bleu ou alpha.

Quand la ligne ou la colonne précédente n'existe pas, alors les octets des pixels ont par convention valeur 0.

Les codes de prédiction et les lignes de pixels sont compressés avec l'algorithme Deflate. Le flux compressé est précédé de l'en-tête standard de ZLib dont voici les propriétés :

PropriétéTaille en octetsDescription
MethodeCompression1.Méthode de compression - 8.
Options4.Options de ZLib.
DonneesVariable.Données compressées en Deflate.
CodeVerification4.Code de vérification Adler32.

Les options de ZLib doivent sélectionner le dictionnaire par défaut.

Entrelaçage Adam77

L'entrelaçage Adam77 s'effectue en sept passes dont voici la matrice :

1 6 4 6 2 6 4 6
7 7 7 7 7 7 7 7
5 6 5 6 5 6 5 6
7 7 7 7 7 7 7 7
3 6 4 6 3 6 4 6
7 7 7 7 7 7 7 7
5 6 5 6 5 6 5 6
7 7 7 7 7 7 7 7

Prédiction de Paeth

Voici la prédiction de Paeth en Up ! 5GL :

Fonction PredictionPaeth(A : Entier, B : Entier, C : Entier) Retourner Entier
/***************************************************************************/
Variable


P=A+B-C;
PA=Abs(P-A);
PB=Abs(P-B);
PC=Abs(P-C);
Si (PA<=PB) Et (PA<=PC) Alors SinonSi PB<=PC Alors
    Retourner B;
Sinon
    Retourner C;
Fin Si
Fin Fonction