2015-05-08 17 views
5

Pracuję nad stroną ze zdjęciami, w której chcę, aby użytkownik mógł przesłać zdjęcie portretowe lub krajobrazowe. Maksymalna szerokość powinna wynosić 1250 pikseli, ale maksymalna wysokość może wynosić 1667 pikseli, jeśli jest w trybie portretu. Gdy przesyłam zdjęcia w orientacji pionowej, są one obrócone o 90 stopni w lewo. Czy istnieje sposób używania Pillow, aby upewnić się, że zdjęcie pozostaje we właściwej orientacji?Django obraca zdjęcie iPhone po przesłaniu

To jest mój kod:

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() 

To ważne, że użytkownicy będą mogli przesyłać zdjęcia ze swoich telefonów, gdy są one mobilne, więc prawidłowa orientacja jest naprawdę ważne. Czy mogę coś tutaj zrobić?

+0

Możliwy duplikat [Using PIL do obrazu Automatyczne obracanie pobranej z telefonu komórkowego i accelorometer] (http://stackoverflow.com/questions/12133612/using-pil-to-auto-rotate-picture-taken- z cell-phone-and-accelorometer) – Jerzyk

Odpowiedz

1

Możesz spróbować czegoś takiego, aby zmienić rozmiar i automatycznie obrócić (w oparciu o informacje exif) obraz za pomocą Pillow.

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) 
Powiązane problemy