2017-10-13 12 views
2

Lorsque je fais Image.open en python, il retourne parfois la largeur et la hauteur de l'image. Après quelques recherches (voir l'explication de post), il semble que si l'image est associée à Exif Orientation metadata, alors cela entraînera les applications qui respectent cette propriété à la faire pivoter.Définir manuellement la propriété Exif et conserver la largeur et la hauteur d'origine de l'image en Python

Alors d'abord je teste la propriété Exif de mon image en faisant

identify -verbose image.JPG | grep Orientation 

Il retourne , ce qui signifie que l'image a la propriété et donc sera retourné. Si la réponse est alors l'image n'a pas Exif Orientation metadata et par conséquent n'est pas retournée. Puisque je ne veux pas retourner l'image, j'ai essayé de régler le Exif property manuellement en prenant une suggestion de ce post.

J'ai donc essayé de définir manuellement orientation.exif.primary.Orientation[0] = 1 dans mon code. Comme ceci:

from PIL import Image 
import pexif 


orientation = pexif.JpegFile.fromFile('image.JPG') 

print("BEFORE:") 
print(orientation.exif.primary.Orientation[0]) 

orientation.exif.primary.Orientation[0] = 1 

print("AFTER:") 
print(orientation.exif.primary.Orientation[0]) 


img = Image.open('image.JPG') 
print(img.size) 

Ceci corrige des impressions après APRÈS cependant, il ne définit pas réellement à 1 dans la vraie vie parce que quand je lance identify -verbose image.JPG | grep Orientation encore, il montre encore . Alors, comment contourner ce problème et ne pas avoir la largeur et la hauteur de l'image inversée?

Répondre

0

Je ne prends pas de crédit pour cela. Ce post de Superuser a résolu mon problème.

Fix:

import os 
os.system("exiftool -Orientation=1 -n image.JPG") 

Ceci définit l'orientation de l'image réelle à 1. Le code que j'avais dans la question initiale modifie l'orientation de l'objet d'image que j'ai créé, pas l'image réelle elle-même.