Qu’est-ce que PJPEG ?
PJPEG désigne couramment le JPEG progressif, qui stocke une image en plusieurs balayages. Un décodeur peut afficher une version grossière de l’image entière avant que les balayages suivants n’ajoutent des détails plus fins.
Fonctionnement de PJPEG
Un JPEG progressif répartit les informations des coefficients en une séquence de balayages, plutôt que d’encoder entièrement chaque région de l’image en une seule passe. Les premiers balayages établissent la structure générale de l’image entière, puis les suivants apportent des détails fréquentiels supplémentaires ou une précision accrue des coefficients. Il fait toujours partie de l’écosystème JPEG classique et peut donc suivre les chaînes habituelles de traitement des ressources photographiques, mais l’affinement visible dépend à la fois du décodeur et du logiciel d’affichage.
Points clés
- Le JPEG progressif est un mode de la norme JPEG, et non un format distinct : les mêmes coefficients DCT quantifiés sont répartis sur plusieurs balayages, par sélection spectrale (bandes de coefficients), approximation successive (bits de poids fort en premier), ou les deux. Il ne s’agit pas d’un empilement de miniatures encodées indépendamment. Un analyseur peut lire le mode dans le marqueur d’en-tête d’image :
FF C2(SOF2) pour un fichier progressif codé par Huffman,FF C0(SOF0) pour le mode de base. - Ni l’extension du fichier ni le type de média n’identifient le mode. Les fichiers progressifs conservent normalement
.jpgou.jpeg, ainsi queimage/jpeg; MDN répertorie également.pjpeget.pjpcomme extensions JPEG.image/pjpegne figure pas dans le registre de l’IANA. Il s’agit de l’appellation que la détection MIME d’Internet Explorer renvoyait pour les données JPEG en général, à des fins de rétrocompatibilité. Un fichier téléversé portant l’étiquetteimage/pjpegn’est donc pas nécessairement progressif, et une liste d’autorisation prenant en compte ces anciens clients doit le traiter comme du JPEG et inspecter son contenu. - Décoder un fichier progressif et afficher ses passes intermédiaires sont deux choses distinctes. libjpeg-turbo ne renvoie que l’image finale, sauf si l’application utilise son mode d’image mise en mémoire tampon, et sa documentation indique que chaque passe affichée demande à peu près autant de travail que le décodage d’une image complète. Un fichier à plusieurs balayages nécessite également un tampon de coefficients pour l’image entière, là où un fichier à un seul balayage n’a besoin que de tampons proportionnels à la largeur de l’image. Les outils de libjpeg-turbo proposent aussi une limite du nombre de balayages, car des fichiers spécialement conçus avec un très grand nombre de balayages peuvent consommer excessivement le processeur. Prévoyez la mémoire nécessaire et plafonnez le nombre de balayages lors du décodage de fichiers téléversés non fiables.
- À réglage de qualité identique, un fichier progressif se décode en restituant la même image finale qu’un fichier séquentiel et présente une taille à peu près équivalente, souvent légèrement inférieure, selon la documentation de libjpeg-turbo. Choisissez-le pour l’affichage progressif, et non pour réduire la taille. La norme n’exige pas que les implémentations fournissent tous les modes, et certains décodeurs embarqués, tels que TJpgDec, ne prennent en charge que le mode de base.
Quand PJPEG est utile
Choisissez le JPEG progressif lorsqu’un premier aperçu visuel pendant le téléchargement d’une photographie volumineuse est utile. Les principaux navigateurs et bibliothèques d’imagerie décodent les balayages progressifs de manière fiable ; réservez donc les vérifications de compatibilité aux cibles contraintes, comme les décodeurs embarqués ou matériels qui n’implémentent que le JPEG de base.
Comment Transloadit vous aide avec PJPEG
Le Robot /image/resize de Transloadit possède un paramètre progressive qui entrelace la sortie afin que les navigateurs puissent afficher une version basse résolution de l’image entière avant l’arrivée du reste des données ; il est désactivé par défaut. Le tableau des formats d’image répertorie également PJPEG, aux côtés de JPG et JPEG, comme un nom de format que ses Robots basés sur ImageMagick peuvent lire et écrire.
La documentation du Robot indique un surcoût en taille de fichier pour progressive, sans préciser à quels formats de sortie l’option ou ce surcoût s’applique. La documentation de libjpeg-turbo décrit les fichiers JPEG progressifs comme ayant une taille à peu près équivalente à celle des fichiers séquentiels, souvent légèrement inférieure : mesurez donc le résultat avec vos propres images. La documentation ne décrit pas ce que le choix de PJPEG comme format de sortie change par rapport à JPG.
Explorer les possibilités de Transloadit en matière de formats de fichiers et de compression
Références
- ITU-T T.81 (JPEG) : modes de fonctionnement, sélection spectrale, approximation successive et marqueurs d’image
- libjpeg-turbo : documentation de la bibliothèque libjpeg, prise en charge du JPEG progressif, mode d’image mise en mémoire tampon et utilisation de la mémoire
- libjpeg-turbo : utilisation de cjpeg, djpeg et jpegtran, notamment -progressive et -maxscans
- Registre des types de médias de l’IANA, types d’image
- Microsoft : détection du type MIME dans Windows Internet Explorer, image/pjpeg
- MDN : guide des types et formats de fichiers d’image, extensions JPEG et prise en charge par les navigateurs
- Note d’application de TJpgDec : limites d’un décodeur embarqué ne prenant en charge que le mode de base