Lorsqu'un fichier JPEG est ouvert avec PIL (Pillow), même si une valeur est définie dans la balise Orientation d'EXIF, elle n'est pas prise en compte. Un exemple d'implémentation de la façon de générer des données après avoir effectué un traitement de rotation / retournement en fonction de la valeur définie dans la balise Orientation.
from PIL import Image
file_path = "Chemin du fichier image JPEG"
#Traitement selon la valeur de la balise Orientation
#L'angle de rotation dans PIL est positif dans le sens antihoraire
convert_image = {
1: lambda img: img,
2: lambda img: img.transpose(Image.FLIP_LEFT_RIGHT), #Retourner horizontalement
3: lambda img: img.transpose(Image.ROTATE_180), #Rotation à 180 degrés
4: lambda img: img.transpose(Image.FLIP_TOP_BOTTOM), #retourner à l'envers
5: lambda img: img.transpose(Image.FLIP_LEFT_RIGHT).transpose(Pillow.ROTATE_90), #Retourner à gauche et à droite et faire pivoter de 90 degrés dans le sens antihoraire
6: lambda img: img.transpose(Image.ROTATE_270), #Rotation de 270 degrés dans le sens antihoraire
7: lambda img: img.transpose(Image.FLIP_LEFT_RIGHT).transpose(Pillow.ROTATE_270), #Inversion gauche-droite et rotation antihoraire 270 degrés
8: lambda img: img.transpose(Image.ROTATE_90), #Rotation de 90 degrés dans le sens antihoraire
}
img = Image.open(file_path)
exif = img._getexif()
orientation = exif.get(0x112, 1)
new_img = convert_image[orientation](img)
Cliquez ici pour la définition du standard EXIF. http://www.cipa.jp/std/documents/j/DC-008-2012_J.pdf
Cependant, la définition de la valeur de la balise d'orientation d'EXIF est difficile à comprendre simplement en regardant l'explication. Il existe différentes pages qui expliquent de manière facile à comprendre par la recherche. Par exemple, ici. http://hackmylife.net/archives/7400448.html