Contexte
Je travaille depuis un certain temps sur un plugin ImageIO pour la lecture des JPEGs. Une des fonctionnalités que j'aimerais implémenter, est la rotation automatique de l'image, en fonction de la balise EXIF/TIFF Orientation, si elle est présente.
Je ne demande pas comment mettre en œuvre la rotation elle-même, mon problème concerne plutôt l'API ImageReader. Pour de nombreux utilisateurs, le simple fait d'appeler ImageIO.read(myJPEG)
C'est tout ce qu'ils font, et je pense qu'ils sont satisfaits de la rotation de l'image dans la bonne orientation. Cependant, si vous regardez le ImageReader
API Il dispose de nombreuses méthodes pour obtenir des informations et des métadonnées sur l'image, ainsi que de plusieurs moyens pour lire les données des pixels.
La ou les questions
Devrais-je exposer un moyen de lire les données telles qu'elles sont dans le fichier, en utilisant la fonction ImageReadParam
(Je pourrais aussi le faire dans l'autre sens, mais cela ne permettrait pas au cas commun mentionné ci-dessus de bénéficier de la fonctionnalité) ?
Je travaille sur le support des métadonnées (comme dans IIOMetadata
), les métadonnées doivent-elles signaler la balise d'orientation telle qu'elle est écrite dans le fichier, ou être mises à jour pour refléter la rotation de l'image ? C'est là que je sens que les choses se dégradent... La vraie question ici est de savoir ce qui se passe lorsque quelqu'un lit l'image et les métadonnées, fait quelques manipulations sur l'image et la stocke à nouveau avec les métadonnées (est-ce que le rédacteur doit alors faire la rotation inverse, ou bien supprimer "comme par magie" la balise d'orientation et la mettre à jour) ?
... ou bien, en option, devrais-je simplement abandonner et laisser aux clients le soin de lire les métadonnées EXIF et d'appliquer eux-mêmes la rotation si nécessaire ?
Les contributions et les suggestions des responsables de la mise en œuvre ainsi que des utilisateurs d'ImageIO sont les bienvenues ! :-)