Les formats
bmp
(BitMaP) :
Lorsqu'une palette est utilisé, elle est
représentée par une succession de 4 octets, chaque
quadruplet représentant un élément de la palette
sous la forme bleu, vert, rouge, réservé.
Le format BMP a été
développé conjointement
par Microsoft et IBM, il peut être compressé en RLE ou pas. Il est composé de la structure suivante :
Header du
fichier :
- 2 octets : Signature du fichier BMP, BM (424D en
hexa) en général, d'autres valeures sont possibles : BA,
CI, CP, IC, PT,
- 4 octets : Taille totale du fichier en octets,
- 4 octets : Réservé,
- 4 octets : Offset de l'image.
PNM
(portable anymap file format) :
Le format PNM (portable anymap file format) a été
créé par Jef Poskanzer et se décline en plusieurs
sous formats :
- PBM : 1 bit par pixel, noir et blanc.
- PGM : 1 octet (ou plus) par pixel, niveau de gris,
- PPM : 1 octet (ou plus) par couleur, RGB.
Le format PNM est en fait un meta-format et regroupe les trois
précédents, vous pouvez donc donner a votre fichier
plusieurs extensions possibles. Un fichier PNM consiste en un header en
mode texte précisant le type de PNM que l'on appelle identifiant
(PPM,PGM ou PBM), la taille de l'image et la profondeur qui permet de
donner la valeur maximale de la couleur, et permet donc d'utiliser plus
d'un octet par couleur (soit plus de 255). On peut insérer des
commentaires dans le fichier en commençant une ligne par un
dièse (#).
Le fichier commence par P1, P2 ou P3.
gif
(Graphic Interchange Format) :
Le format gif a été introduit par compuserve et utilise
une compression basé sur l'algorithme LZW. Il utilise une
palette d'une taille maximale de 256, ce qui fait qu'une image gif ne
peut contenir au maximum que 256 couleurs différentes, par
contre l'ensemble de ces couleurs sont choisies a partir des
composantes RVB, une couleur spéciale permet de spécifier
que le pixel est transparent. Le problème de ce format est qu'il
était soumis a plusieurs brevets (il fallait donc payer des
royalties), dont le dernier a expiré en aout 2006.
Header du
fichier :
- 3 octets : Signature du fichier : GIF,
- 3 octets : Version : 87a ou 89a,
- 2 octets : Largeur,
- 2 octets : Hauteur,
- 2 octets : ...,
png
(Portable Network Graphics) :
Ce format a été créé pour contrer le
problème de brevet du format GIF, il permet de faire tout ce que
fait le gif et meme bien plus. La seule exception est les images
animées, pour lesquelles un autre format a été
défini : MNG. Le format permet de représenter les images
en noir et blanc, quadrichromie, palette, 24 bits, ... Il gère
également la transparence par un codage en RVBA (donc mieux que
GIF) ou avec une seule couleur de transparence lors de l'utilisation
d'une palette. L'algorithme de compression utilisé est gzip.
Header du
fichier :
- 8 octets : Signature du fichier : 137 80 78 71 13 10 26 10, en décimal ou 89 50 4E 47 0D 0A 1A 0A en hexadécimal,
- Un ensemble de segments dont le premier doit être le segment d'entête,
Chaque segment est définit de la manière suivante :
- 4 octets : La taille du segment (entier non signé),
- 4 octets : Le type de segment (par exemple IHDR pour l'entête),
- Les données,
- 4 octets : Le CRC (cyclic redundancy check),
tiff
(Tagged Image File Format) :
Le format de fichier tiff appartient a microsoft et Adobe. Il est un
peu particulier dans le sens ou il permet un nombre tres important de
représentation, compressé ou nom, avec espace de
colorimétrie différent, ...). Son format est basé
sur l'utilisation de TAG, d'ou son nom.
jpeg
(Joint Photographic Experts Group) :
Cette norme définit un format de compression mais non un format
de fichier, le format correspondant est le JPEG File Interchange Format
(JFIF). Ce format de fichier est basé sur l'utilisation d'un
algorithme de compression avec pertes, ce qui signifie qu'une certaine
quantité de l'information est supprimée, toutefois, la
norme permet de définir le taux de compression, permettant alors
a l'utilisateur de réaliser un compromis entre taille et
qualité. L'algorithme de compression est relativement complexe,
basé sur le découpage de l'image en blocs de pixels, et
sur une transformée en Cosinus Discrète (DCT).
Le fichier est constitué de zone, chacune d'entre elles commençant par un "marqueur".
Header du
fichier :
- 2 octets : Marqueur SOI (Start of Image) : FFD8,
Première zone :
- 2 octets : Marqueur JFIF : FFE0,
- 2 octets : Longeur,
- 5 octets : 4A 46 49 46 00 en héxadécimal, chaine de caractères "JFIF",
- 2 octets : Version,
- 1 octet : Unité,
- 2 octets : X densité,
- 2 octets : Y densité,
- 1 octet : X thumbnail,
- 1 octet : Y thumbnail,
- 3n octets : thumbnail, Valeur RGB du thumbnail de taille n = X thumbnail * Y thumbnail,
Zone de commentaire :
- 2 octets : Marqueur FF FE,
- 2 octets : Longeur,
- n cotets : Commentaires ...
jpeg 2000
:
C'est une évolution du format précédent, il est
basé sur l'utilisation de la compression par ondelettes. Son
principal interet n'est pas seulement son facteur de compression
(meilleur que jpg) mais surtout les extensions possibles liées
à ce format.
svg
(Scalable Vector Graphics) :
Ce format est un peu particulier dans le sens ou ce n'est pas un format
"bitmap", c'est à dire pixels, mais vectoriel. On ne
représente plus les pixels un par un, mais par des formes
globales. On pourrait ainsi définir ce format comme un language
de représentation des images. Voici un exemple de fichier svg :
<?xml
version="1.0" encoding="utf-8"?>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:ev="http://www.w3.org/2001/xml-events"
version="1.1"
baseProfile="full"
x="0"
y="0"
width="300"
height="200"
id="svg2">
<title>Rectangles</title>
<defs
id="defs4" />
<g
id="layer1">
<rect
width="300"
height="120"
x="0"
y="20"
fill="green"
id="rect1306" />
<rect
width="80"
height="150"
x="20"
y="30"
fill="red"
id="rect1308" />
<rect
width="140"
height="80"
x="50"
y="50"
fill="blue"
id="rect1310" />
</g>
</svg>
Cliquez ici pour afficher l'image
Pour toute information
complémentaire : http://fr.wikipedia.org
Exercice
- En consultant les documentations internet, vous allez faire un
programme capable de détecter l'image passée en argument
(pnm, bmp, gif, png, ...).