Sto utilizzando Django + PIL + Amazon boto in un'applicazione web. L'utente invia l'immagine e la webapp la visualizza. Per lo più, le persone inviano foto scattate dal proprio telefono cellulare. A volte, l'immagine viene visualizzata con l'orientamento sbagliato. C'è un modo per usare ImageField di PIL o Django per ottenere le meta informazioni dall'immagine e usarle per ruotare l'immagine con l'orientamento corretto?Utilizzo di PIL per ruotare automaticamente l'immagine scattata con il telefono cellulare e l'accellerometro
7
A
risposta
3
Prova questo per ottenere le informazioni EXIF. N.B .: il metodo _getexif()
appartiene al plugin JPEG. Non esisterà in altri tipi di immagini.
import Image
from PIL.ExifTags import TAGS
im = Image.open('a-jpeg-file.jpg')
exifdict = im._getexif()
if len(exifdict):
for k in exifdict.keys():
if k in TAGS.keys():
print TAGS[k], exifdict[k]
else:
print k, exifdict[k]
Per un'immagine casuale che ho trovato sul mio hard disk, questo prodotto:
ExifVersion 0221
ComponentsConfiguration
ApertureValue (4312, 1707)
DateTimeOriginal 2012:07:19 17:33:37
DateTimeDigitized 2012:07:19 17:33:37
41989 35
FlashPixVersion 0100
MeteringMode 5
Flash 32
FocalLength (107, 25)
41986 0
Make Apple
Model iPad
Orientation 1
YCbCrPositioning 1
SubjectLocation (1295, 967, 699, 696)
SensingMethod 2
XResolution (72, 1)
YResolution (72, 1)
ExposureTime (1, 60)
ExposureProgram 2
ColorSpace 1
41990 0
ISOSpeedRatings 80
ResolutionUnit 2
41987 0
FNumber (12, 5)
Software 5.1.1
DateTime 2012:07:19 17:33:37
41994 0
ExifImageWidth 2592
ExifImageHeight 1936
ExifOffset 188
è il valore Orientation
che si desidera. Il suo significato può essere trovato per es. su exif orientation page.
I dati exif grezzi sono disponibili come stringa da Image.info['exif']
. La rotazione può essere eseguita con il metodo rotate()
.
Non sono a conoscenza di un metodo per modificare i dati EXIF utilizzando PIL, oltre a modificare i dati non elaborati.
3
sto usando django-imagekit per l'elaborazione di immagini quindi utilizzando imagekit.processors.Transpose
from imagekit.models import ImageSpecField
from imagekit.processors import ResizeToFill, Transpose, SmartResize
class UserProfile(models.Model):
avatar = models.ImageField(upload_to='upload/avatars', max_length=255, blank=True, null=True)
avatar_thumbnail = ImageSpecField(
source='avatar',
processors = [Transpose(),SmartResize(200, 200)],
format = 'JPEG',
options = {'quality': 75}
)
Heres un filo che forse può aiutare a: http: //stackoverflow.com/questions/1606587/how-to-use-pil- to-resize-and-apply-rotation-exif-information-to-the-file – Jingo
Questo potrebbe aiutarti http://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image – Rakesh