Comment utiliser PIL de les redimensionner et de les appliquer de rotation informations EXIF du fichier?
Je suis en train d'utiliser Python pour redimensionner l'image.
Avec mon appareil photo, les fichiers sont tous écrits est paysage manière.
Les informations exif de la poignée d'une balise de demander le spectateur de l'image à faire pivoter dans un sens ou un autre.
Puisque la plupart des navigateur ne comprends pas cette information, je tiens à faire pivoter l'image à l'aide de cette information EXIF et en gardant toutes les autres informations EXIF.
Savez-vous comment je peux le faire à l'aide de Python ?
La lecture de la EXIF.py le code source, j'ai trouvé quelque chose comme ça :
0x0112: ('Orientation',
{1: 'Horizontal (normal)',
2: 'Mirrored horizontal',
3: 'Rotated 180',
4: 'Mirrored vertical',
5: 'Mirrored horizontal then rotated 90 CCW',
6: 'Rotated 90 CW',
7: 'Mirrored horizontal then rotated 90 CW',
8: 'Rotated 90 CCW'})
Comment puis-je utiliser cette information et le PIL pour l'appliquer ?
- Plus d'informations ici : abc-view.com/articles/article5.html pensez-vous que je devrais utiliser une fonction avec un processus spécifique au sujet de cette valeur ?
- bonne question! Peut PIL rotation JPEG sans perte (comme
jpegtran
)? Sans lossless transformations, je ne voudrais pas envisager de faire cela.
Vous devez vous connecter pour publier un commentaire.
J'ai finalement utilisé pyexiv2, mais il est un peu difficile à installer sur d'autres plates-formes que de GNU.
Si vous voyez quelque chose qui pourrait être améliorée (à l'exception du fait qu'il est encore pour Python 2.5) alors s'il vous plaît laissez-moi savoir.
im.rotate(45) # degrees counter-clockwise
et après queThere’s no difference in performance or result between transpose(ROTATE) and corresponding rotate operations.
im.transpose(Image.FLIP_TOP_BOTTOM).transpose(Image.ROTATE_90)
pasim.transpose(Image.FLIP_TOP_BOTTOM).transpose(Image.ROTATE_270)
Bien que PIL peut lire les métadonnées EXIF, il n'a pas la capacité de le modifier et de l'écrire dans un fichier image.
Un meilleur choix est le pyexiv2 de la bibliothèque. Avec cette bibliothèque, c'est assez simple flip de la photo de l'orientation. Voici un exemple:
Cela définit l'orientation à 6, correspondant à "une Rotation de 90 CW".
Vous devez d'abord assurez-vous que votre caméra dispose d'un capteur de rotation. La plupart des modèles de caméra sans capteur suffit de définir l'Orientation de la Balise 1 (Horizontal) pour TOUTES les images.
Alors je vous recommande d'utiliser pyexiv2 et pyjpegtran dans votre cas. PIL ne prend pas en charge sans perte de rotation, qui est le domaine de pyjpegtran. pyexiv2 est une bibliothèque qui vous permet de copier les métadonnées d'une image à l'autre (je pense que le nom de la méthode est copyMetadata).
Êtes-vous sûr que vous ne voulez pas de redimensionner vos photos avant de les afficher dans le navigateur? Un 8 Mégapixels JPEG est beaucoup trop grand pour la fenêtre du navigateur et va provoquer d'interminables temps de chargement.