2012-08-26 4 views
7

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

+1

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

+0

Questo potrebbe aiutarti http://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image – Rakesh

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} 
) 
Problemi correlati