2012-08-26 3 views
7

Ich benutze Django + PIL + Amazon Boto in einer Web-App. Der Benutzer sendet das Bild und die Webapp zeigt es an. Meistens schicken die Leute Fotos von ihrem Handy ein. Manchmal wird das Bild in der falschen Ausrichtung angezeigt. Gibt es eine Möglichkeit, PIL oder Djangos ImageField zu verwenden, um die Metainformationen aus dem Bild zu erhalten und es zu verwenden, um das Bild in die richtige Ausrichtung zu drehen?PIL verwenden, um Bild automatisch mit dem Handy und Accelorometer zu drehen

+1

Heres ein Thread mit, dass vielleicht können Sie helfen: http: //stackoverflow.com/questions/1606587/how-to-use-pil- to-resize-and-apply-rotation-exif-Informationen-zur-Datei – Jingo

+0

Dies könnte Ihnen helfen http://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image – Rakesh

Antwort

3

Versuchen Sie dies, um die EXIF-Informationen zu erhalten. N .: Die _getexif()-Methode gehört zum JPEG-Plugin. Es wird nicht in anderen Arten von Bildern existieren.

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] 

Für eine zufällige Bild, das ich auf meiner Festplatte gefunden, dies erzeugt:

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 

Es ist der Orientation Wert ist, den Sie möchten. Seine Bedeutung kann z.B. auf der exif orientation page.

Die unverarbeiteten exif-Daten sind als Zeichenfolge von Image.info['exif'] verfügbar. Die Rotation kann mit der rotate() Methode durchgeführt werden.

Mir ist nicht bekannt, eine Methode zum Ändern der EXIF-Daten mit PIL, außer dem Ändern der Rohdaten.

3

Ich verwende django-imagekit für Bilder dann die Verarbeitung 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} 
) 
Verwandte Themen