Image file formats and compression/fr

From RawPedia
Jump to: navigation, search

Formats de fichiers image et compression


Format intermédiaire

Un fichier intermédiaire est un fichier utilisé uniquement pour transférer l'image d'un programme à l'autre pendant le travail sur celle-ci, par exemple de RawTherapee vers Gimp ou Photoshop.

Le fichier intermédiaire idéal est un format sans pertes de données ou métadonnées et qui est rapide en lecture ou écriture. Cela impose fortement à toujours utiliser comme format intermédiaire le TIFF 16-bits non compressé. Point final.

Format final

Certaines choses sont à considérer pour décider du format à utiliser pour le stockage de fichiers non-intermediares, par exemple, des images dont le traitement est terminé, du film scanné, des images à grande gamme dynamique, etc. :

  • JPEG est le plus largement supporté mais cause des pertes de données et est limité à 8 bits par canal, 24 bits par pixel, dans la majorité des implémentations.
  • TIFF et JPEG supportent les métadonnées, pas PNG, en général.
  • TIFF peut utiliser plusieurs méthodes de compression (y compris celle utilisée par PNG : DEFLATE, aussi appelée Zip). Zip est la méthode de compression la plus efficace pour les photos du monde réel supportées par TIFF.
  • PNG est lent et inefficace.
  • Les images peuvent être extérieurement converties en d'autres format plus efficaces, tels que JPEG-2000 ou OpenEXR en 16-bits.

Comparaison de compressions sans pertes

Le fichier d'entrée est un panorama du monde réel de 10000x5000 pixels en 16 bits.

Pour convertir les formats j'ai utilisé ImageMagick-6.8.8.10 sur un PC x86_64 Intel(R) Core(TM) i7 CPU Q 820 @ 1.73GHz, et j'ai réalisé un script des étapes dans Bash.


TIFF 16-bit

for c in RLE None LZW Zip; do time convert foo.tif[0] -monitor -depth 16 -compress "$c" "${c}_16.tif"; ls -lh "${c}_16.tif"; done
Format Compression Taille [Mo] Temps[s]
TIFF 16-bit Aucune 382 5
TIFF 16-bit RLE 385 5
TIFF 16-bit LZW 293 8
TIFF 16-bit Zip 243 61

Effectivement, la taille obtenue par RLE est supérieure à celle de l'image non compressée.

TIFF 12-bit

for c in None LZW Zip; do time convert foo.tif[0] -monitor -depth 12 -compress "$c" "${c}_12.tif"; ls -lh "${c}_12.tif"; done
Format Compression Taille [Mo] Temps[s]
TIFF 12-bit Aucune 287 4
TIFF 12-bit LZW 248 9
TIFF 12-bit Zip 210 44
GIMP-2.9 et RawTherapee-4.2 ne lisent pas les fichiers 12-bit TIFF.


TIFF 8-bit

for c in None LZW Zip; do time convert foo.tif[0] -monitor -depth 8 -compress "$c" "${c}_8.tif"; ls -lh "${c}_8.tif"; done
Format Compression Taille [Mo] Temps[s]
TIFF 8-bit Aucune 191 3
TIFF 8-bit LZW 51 4
TIFF 8-bit Zip 49 41


TIFF 16-bit virgule flottante

for c in None LZW Zip; do time convert foo.tif[0] -monitor -define quantum:format=floating-point -compress "$c" "${c}_fp.tif"; ls -lh "${c}_fp.tif"; done
Format Compression Taille [Mo] Temps[s] [s]
TIFF 16-bit virgule flottante Aucune 382 6
TIFF 16-bit virgule flottante LZW 153 8
TIFF 16-bit virgule flottante Zip 133 72


TIFF 64-bit double-précision virgule flottante

for c in None LZW Zip; do time convert foo.tif[0] -monitor -depth 64 -define quantum:format=floating-point -compress "$c" "${c}_64fp.tif"; ls -lh "${c}_64fp.tif"; done
Format Compression Taille [Mo] Temps[s]
TIFF 64-bit virgule flottante double Aucune 1525 21
TIFF 64-bit virgule flottante double LZW 1016 36
TIFF 64-bit virgule flottante double Zip 551 104


OpenEXR 16-bit virgule flottante

OpenEXR est un bon choix; il est moderne, efficace et largement supporté.

for c in None Zip PIZ; do time convert foo.tif[0] -monitor -depth 16 -compress "$c" "${c}_16.exr"; ls -lh "${c}_16.exr"; done
Format Compression Taille [Mo] Temps[s]]
EXR 16-bit Aucune 382 13
EXR 16-bit Zip 106 21
EXR 16-bit PIZ 111 7


Pour convertir le format EXR vers le TIFF 16-bits, vous devez choisir l'espace colorimétrique sRGB (le paramétrer, ne pas le transformer):

convert Zip_16.exr -depth 16 -set colorspace sRGB suchwow.tif

PNG 16-bit

En fait, PNG. ImageMagick vous laisse paramétrer le niveau de compression zlib de 1 à 9, ou utilise la compression Huffman si vous paramétrez la première valeur à 0. La seconde valeur définit le filtre d'encodage où 5=Adaptive, le meilleur pour les photos dans le monde réel.

for l in 0 6 9; do time foo.tif[0] -monitor -depth 16 -quality "${l}5" "${l}5_16.png"; ls -lh "${l}5_16.png"; done
Format Compression Taille [Mo] Temps[s]
PNG 16-bit level 0 310 9
PNG 16-bit level 6 233 87
PNG 16-bit level 9 233 351

Remarquez la même taille de fichier pour les niveaux 6 et 9 malgré un temps 4 fois plus long.

PNG 8-bit

for l in 0 6 9; do time foo.tif[0] -monitor -depth 8 -quality "${l}5" "${l}5_8.png"; ls -lh "${l}5_8.png"; done
Format Compression Taille [Mo] Temps[s]
PNG 8-bit level 0 137 10
PNG 8-bit level 6 49 40
PNG 8-bit level 9 46 341