Android redimensionnement d'image et de la préservation des données EXIF (orientation, rotation, etc.)
Si votre Android appli utilise l'appareil photo pour prendre une photo, puis redimensionne (ce qui est très, très commun pour réduire la taille de téléchargement), vous pourriez ne pas réaliser que cette opération de redimensionnement bandes les métadonnées Exif.
Cela peut causer des problèmes, surtout si l'appareil en question repose sur l'Orientation de la balise pour afficher correctement l'image à la verticale.
Différents appareils Android poignée de l'appareil photo/rotation de l'image, de différentes façons, mon bon vieux Nexus One semble toujours faire pivoter l'image immédiatement après la capture, de sorte que le fichier natif de contenu sont toujours "debout" lorsqu'il est affiché.
Toutefois, d'autres dispositifs (en particulier les téléphones Samsung dans mes tests), ne pas faire pivoter le contenu du fichier image, plutôt, ils ont mis les Exif "Orientation" de la balise. Chaque fois que l'image est affichée plus tard, l'image de code devrait détecter la présence de l'Orientation " tag " et faire pivoter l'image de façon appropriée. Mais si vous avez fait tout traitement de bitmap sur l'image et enregistrez-le dans un nouveau fichier, toutes les données Exif sont perdues.
En plus de l'Orientation de données, vous risquez également de perdre de précieuses métadonnées telles que la marque, modèle, etc.
Ce qui me confond, pour quelques semaines (image apparaît en position verticale lorsqu'il est affiché dans la galerie de téléphone, mais ensuite arrive sur mon serveur avec une mauvaise orientation et une absence apparente de métadonnées). Je suis en ajoutant ce soi-question ici pour aider les autres. Ce blog a été très utile:
Android re-taille de l'image sans perdre les informations EXIF
Vous devez vous connecter pour publier un commentaire.
Comme d'autres l'ont indiqué, vous devez copier les données Exif de l'image d'origine à la finale de l'image redimensionnée. Le Sanselan Android bibliothèque est généralement la meilleure pour cette. Selon Android version du système d'exploitation, la ExifInterface parfois corrompt la Exifdata.
En outre, la ExifInterface gère également un nombre limité de balises Exif, à savoir uniquement les balises qu'il "connaît". Sanselan sur l'autre main va garder tous Exiftags et marqueur de notes.
Ici est un blog qui montre comment utiliser Sanselan pour la copie des données d'image:
La copie des métadonnées Exif à l'aide de Sanselan
BTW, sur Android, j'ai aussi tendance à faire pivoter les images et de supprimer l'Orientation Exiftag. Par exemple, sur un Nexus S avec Android 4.03, la caméra était un indicateur d'orientation dans le Exifmetadata, mais la webview a été en ignorant que l'information et l'affichage de l'image de manière incorrecte. Malheureusement, la rotation de l'image réelle de données et la suppression de la Exiforientation balise est la seule façon d'obtenir de chaque programme pour afficher correctement les images.
Pour autant que je sache, il n'est pas mécanisme pour conserver les métadonnées automatiquement ou même de l'instantané de ce qui est là et le transfert en vrac.
Il semble plutôt que vous devez explicitement vérifier des propriétés spécifiques, et de les copier vous-même pour le nouveau fichier image à l'aide de la ExifInterface.
http://developer.android.com/reference/android/media/ExifInterface.html
Donc quelque chose comme:
Pour les paresseux, voici une réutilisables fonction:
C'est déjà 2019 et il n'y a toujours pas de meilleure réponse que celles proposées par @prom85, Mike Repass et Theo.
En 2016, Android équipe a présenté ExifInterface Bibliothèque De Prise En Charge ce qui peut être la meilleure option si vous voulez avoir consisent comportement entre les versions d'Android. J'ai fini par créer un sous-ensemble de balises
ExifInterface#EXIF_TAGS
(le code source) et je viens de parcourir ce sous-ensemble pour extraire les méta-données du fichier d'entrée et un de sortie. Si jamais vous avez une exigence de copier toutes les balises, je vous recommande de ne pas le faire! La valeur de certains de ces étiquettes devront être mis à jour en conséquence de toute façon (par exemple,TAG_IMAGE_LENGTH
etTAG_IMAGE_WIDTH
). Personnellement, j'ai gardé de poser des questions pourquoi nous avons besoin de garder tous des métadonnées de niveau des données en premier lieu (il diffère de ce que vous obtenez entre les périphériques et l'appareil photo que vous utilisez tout de même) et nous nous sommes rendu compte que la localisation gps et les données de date/heure est ainsi à conserver.