Les formats d'image sont faits pour permettre de restituer une image de façon à ce que nous la percevions de façon acceptable (avec perte), indiscernable de l'originale (avec pertes imperceptibles), ou identique à l'originale (sans perte perceptible ni mesurable).
C’est pour cela que je ne parle que du « WebP sans perte » et du « PNG sans perte ». Je ne discute pas des formats avec pertes dont les algorithmes supposent un usage bien précis et donc une seule opération de rendu de couleur pour élaborer les optimisations. Si le format a besoin de supposer un usage précis, c’est peut-être qu’on ne fait déjà plus du « sans perte ».
Même pour pour sauvegarder une image pensée pour être affichée sur le web, un graphiste peut vouloir un format « sans perte » qui ne détruise pas les pixels transparents, parce qu’il peut vouloir éditer la transparence plus tard pour révéler la couleur (ou laisser à un autre la possibilité de le faire).
Quand aux autres canaux discutés, ce ne sont pas vraiment « autre choses que des images », ou du moins tout n’est pas « autre chose que des images ». Dans les cas que j’ai évoqués, tous les pixels de tous les canaux codent des données pour les mêmes pixels que les canaux rouge, vert, bleu et alpha, de la même manière que le canal alpha code l’opacité. Ce sont des données supplémentaires pour ces mêmes pixels, ce sont donc des canaux supplémentaires pour ces images.
L’opacité stockée dans le canal alpha n’est déjà pas « une image » en soit.
Comme l’a relevé marzoul, on peut imaginer coder l’opacité avec 3 canaux alpha : rouge, vert, et bleu, pour par exemple ne laisser passer que le rouge par transparence et rester opaque aux autres couleurs, plutôt que de supposer de n’avoir un seul canal de transparence égal à toutes les couleurs.
Les canaux rouge, vert, bleu sont pensés pour de l’affichage opaque sur écran. Le canal alpha a surtout été pensé pour le web, pour se passer de CSS dans la majeure partie des cas (détourage, opacité). Mais ce canal alpha fait des suppositions très fortes : que tous les canaux de couleur soient identiques en alpha, et que l’opération de mélange soit toujours la même. Certains formats comme le GIF n’avaient qu’1 seul bit de transparence, donc ça ne servait qu’au détourage. Le web avait besoin de plus que ça, le canal alpha répond vite-fait au besoin, mais pour une seule fonction, avec un seul canal pour toutes les couleurs, « ça fera l’affaire ».
Les formats d'image sont faits pour [...]
Ces formats d’image ne sont faits que pour le web à l’époque d’HTML 4. FTFY =)
Si on commence à utiliser ça pour autre chose que des images, c'est du détournement de la fonction du format,
Ce n’est pas du détournement de la fonction du format, c’est un ajout de données et d’opérations. Même avec une image qui code des données rouge, vert, bleu dans les canaux rouge, vert, bleu, on peut destiner ces couleurs rouge, vert, bleu à autre chose qu’une seule et même opération de mélange. Par exemple on peut faire une addition. Une « carte d’addition », c’est exactement ça : une image avec des canaux rouge, vert, bleu, mais l’opération utilisée n’est pas celle utilisée par le navigateur quand on fait <img src="image.png"/>, les couleurs seront additionnées.
Il était courant, à une époque où les formats d’images avec canal alpha n’étaient pas autant répandus, de stocker le canal alpha dans une autre image que celle qui stocke les canaux rouge, vert, bleu. Par exemple certains jeux peuvent distribuer les canaux rouge, vert, bleu, dans une image JPEG, puis le canal alpha dans une seconde image JPEG.
Il existe des formats avec pertes qui n’attribuent pas la même précision pour chaque canal. Par exemple on peut imaginer un format couleur et opacité de seulement 16 bits (au lieu de 32 bits) qui attribuerait 3 bits pour le rouge, 3 bits pour le vert, 2 bits pour le bleu, et 8 bits pour l’opacité. Il est courant d’échanger les canaux, par exemple de stocker le vert dans l’alpha si on veut 8 bits de précision pour le bleu. Ces formats d’image avec pertes fournissent éventuellement des métadonnées qui renseignent ces échanges de canaux.
Voici quelques exemples d’attribution de canaux avec des textures du jeu Xonotic :
ivy.jpg
ivy_alpha.jpg
ivy_gloss.jpg
ivy_norm.jpg
JPEG Rouge: Couleur Rouge
JPEG Rouge: Opacité
JPEG Rouge: Spécularité Rouge
JPEG Rouge: Normale X
JPEG Vert: Couleur Vert
JPEG Vert: Spécularité Vert
JPEG Vert: Normale Y
JPEG Bleu: Couleur Bleu
JPEG Bleu: Spécularité Bleu
JPEG Bleu: Normale Z
black-tiles-mossy_norm.jpg
black-tiles-mossy_norm.jpg
black-tiles-mossy_norm_alpha.jpg
JPEG Rouge: Couleur Rouge
JPEG Rouge: Normale X
JPEG Rouge: Profondeur
JPEG Vert: Couleur Vert
JPEG Vert: Normale Y
JPEG Bleu: Couleur Bleu
JPEG Bleu: Normale Z
pk02_floor07.tga
pk02_floor07_gloss.tga
pk02_floor07_norm.tga
TGA Rouge: Couleur Rouge
TGA Rouge: Spécularité Rouge
TGA Rouge: Normal X
TGA Vert: Couleur Vert
TGA Vert: Spécularité Vert
TGA Vert: Normal Y
TGA Bleu: Couleur Bleu
TGA Bleu: Spécularité Bleu
TGA Bleu: Normal Z
TGA Alpha: Opacité
TGA Alpha: Profondeur
pk02_light02a.tga
pk02_light02a_glow.tga
pk02_light02a_gloss.tga
pk02_light02a_norm.tga
TGA Rouge: Couleur Rouge
TGA Rouge: Addition Rouge
TGA Rouge: Spécularité Rouge
TGA Rouge: Normal X
TGA Vert: Couleur Vert
TGA Vert: Addition Vert
TGA Vert: Spécularité Vert
TGA Vert: Normal T
TGA Bleu: Couleur Bleu
TGA Bleu: Addition Bleu
TGA Bleu: Spécularité Bleu
TGA Bleu: Normal Z
TGA Alpha: Profondeur
ce commentaire est sous licence cc by 4 et précédentes
[^] # Re: WebP sans perte et exact
Posté par Thomas Debesse (site web personnel, Mastodon) . En réponse à la dépêche Des formats d'image. Évalué à 8.
C’est pour cela que je ne parle que du « WebP sans perte » et du « PNG sans perte ». Je ne discute pas des formats avec pertes dont les algorithmes supposent un usage bien précis et donc une seule opération de rendu de couleur pour élaborer les optimisations. Si le format a besoin de supposer un usage précis, c’est peut-être qu’on ne fait déjà plus du « sans perte ».
Même pour pour sauvegarder une image pensée pour être affichée sur le web, un graphiste peut vouloir un format « sans perte » qui ne détruise pas les pixels transparents, parce qu’il peut vouloir éditer la transparence plus tard pour révéler la couleur (ou laisser à un autre la possibilité de le faire).
Quand aux autres canaux discutés, ce ne sont pas vraiment « autre choses que des images », ou du moins tout n’est pas « autre chose que des images ». Dans les cas que j’ai évoqués, tous les pixels de tous les canaux codent des données pour les mêmes pixels que les canaux rouge, vert, bleu et alpha, de la même manière que le canal alpha code l’opacité. Ce sont des données supplémentaires pour ces mêmes pixels, ce sont donc des canaux supplémentaires pour ces images.
L’opacité stockée dans le canal alpha n’est déjà pas « une image » en soit.
Comme l’a relevé marzoul, on peut imaginer coder l’opacité avec 3 canaux alpha : rouge, vert, et bleu, pour par exemple ne laisser passer que le rouge par transparence et rester opaque aux autres couleurs, plutôt que de supposer de n’avoir un seul canal de transparence égal à toutes les couleurs.
Les canaux rouge, vert, bleu sont pensés pour de l’affichage opaque sur écran. Le canal alpha a surtout été pensé pour le web, pour se passer de CSS dans la majeure partie des cas (détourage, opacité). Mais ce canal alpha fait des suppositions très fortes : que tous les canaux de couleur soient identiques en alpha, et que l’opération de mélange soit toujours la même. Certains formats comme le GIF n’avaient qu’1 seul bit de transparence, donc ça ne servait qu’au détourage. Le web avait besoin de plus que ça, le canal alpha répond vite-fait au besoin, mais pour une seule fonction, avec un seul canal pour toutes les couleurs, « ça fera l’affaire ».
Ces formats d’image ne sont faits que pour le web à l’époque d’HTML 4. FTFY =)
Ce n’est pas du détournement de la fonction du format, c’est un ajout de données et d’opérations. Même avec une image qui code des données rouge, vert, bleu dans les canaux rouge, vert, bleu, on peut destiner ces couleurs rouge, vert, bleu à autre chose qu’une seule et même opération de mélange. Par exemple on peut faire une addition. Une « carte d’addition », c’est exactement ça : une image avec des canaux rouge, vert, bleu, mais l’opération utilisée n’est pas celle utilisée par le navigateur quand on fait
<img src="image.png"/>, les couleurs seront additionnées.Il était courant, à une époque où les formats d’images avec canal alpha n’étaient pas autant répandus, de stocker le canal alpha dans une autre image que celle qui stocke les canaux rouge, vert, bleu. Par exemple certains jeux peuvent distribuer les canaux rouge, vert, bleu, dans une image JPEG, puis le canal alpha dans une seconde image JPEG.
Il existe des formats avec pertes qui n’attribuent pas la même précision pour chaque canal. Par exemple on peut imaginer un format couleur et opacité de seulement 16 bits (au lieu de 32 bits) qui attribuerait 3 bits pour le rouge, 3 bits pour le vert, 2 bits pour le bleu, et 8 bits pour l’opacité. Il est courant d’échanger les canaux, par exemple de stocker le vert dans l’alpha si on veut 8 bits de précision pour le bleu. Ces formats d’image avec pertes fournissent éventuellement des métadonnées qui renseignent ces échanges de canaux.
Voici quelques exemples d’attribution de canaux avec des textures du jeu Xonotic :
ivy.jpgivy_alpha.jpgivy_gloss.jpgivy_norm.jpgblack-tiles-mossy_norm.jpgblack-tiles-mossy_norm.jpgblack-tiles-mossy_norm_alpha.jpgpk02_floor07.tgapk02_floor07_gloss.tgapk02_floor07_norm.tgapk02_light02a.tgapk02_light02a_glow.tgapk02_light02a_gloss.tgapk02_light02a_norm.tgace commentaire est sous licence cc by 4 et précédentes