2015-05-08 12 views
5

Ich arbeite an einer Foto-Website, wo ich möchte, dass der Benutzer in der Lage, ein Porträt oder Landschaft orientierte Foto hochladen. Die maximale Breite sollte 1250px betragen, aber die maximale Höhe kann im Hochformat 1667px betragen. Wenn ich Fotos im Hochformat hochlade, werden sie um 90 Grad nach links gedreht angezeigt. Gibt es eine Möglichkeit, mit Pillow sicherzustellen, dass das Foto in der richtigen Ausrichtung bleibt?Django dreht Iphone Bild nach dem Upload

Dies ist mein Code:

class Result(models.Model): 
    result01  = models.FileField(upload_to=get_upload_file_name, null=True, blank=True) 
    result01thumb = models.FileField(upload_to=get_upload_file_name, null=True, blank=True) 

    def save(self): 
     super(Result, self).save() 
     if self.result01: 
      size = 1667, 1250 
      image = Image.open(self.result01) 
      image.thumbnail(size, Image.ANTIALIAS) 
      fh = storage.open(self.result01.name, "w") 
      format = 'png' 
      image.save(fh, format) 
      fh.close() 

Es ist wichtig, dass Benutzer in der Lage sein, Fotos von ihren Handys zu laden, während sie mobil sind, so dass die richtige Ausrichtung wirklich wichtig ist. Kann ich hier etwas machen?

+0

Mögliches Duplikat [Mit PIL Bild zu automatischer Drehung genommen mit Handy und accelorometer] (http://stackoverflow.com/questions/12133612/using-pil-to-auto-rotate-picture-taken- Mit-Handy-und-Accelorometer) – Jerzyk

Antwort

1

Sie können so etwas versuchen, um ein Bild mit Pillow zu vergrößern und automatisch zu drehen (basierend auf Exif-Informationen).

def image_resize_and_autorotate(infile, outfile): 
    with Image.open(infile) as image: 
     file_format = image.format 
     exif = image._getexif() 

     image.thumbnail((1667, 1250), resample=Image.ANTIALIAS) 

     # if image has exif data about orientation, let's rotate it 
     orientation_key = 274 # cf ExifTags 
     if exif and orientation_key in exif: 
      orientation = exif[orientation_key] 

      rotate_values = { 
       3: Image.ROTATE_180, 
       6: Image.ROTATE_270, 
       8: Image.ROTATE_90 
      } 

      if orientation in rotate_values: 
       image = image.transpose(rotate_values[orientation]) 

     image.save(outfile, file_format)