2015-05-08 18 views
5

Tôi đang làm việc trên trang web ảnh nơi tôi muốn người dùng có thể tải lên ảnh chân dung hoặc ảnh theo chiều ngang. Chiều rộng tối đa phải là 1250px, nhưng chiều cao tối đa có thể là 1667px nếu ở chế độ dọc. Khi tôi tải ảnh lên theo hướng dọc, chúng hiển thị xoay 90 độ sang trái. Có cách nào sử dụng Gối để đảm bảo ảnh ở đúng hướng không?Django xoay hình ảnh iphone sau khi tải lên

Đây là mã của tôi:

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

Điều quan trọng là người dùng có thể tải lên hình ảnh từ điện thoại của họ trong khi họ đang di động, vì vậy định hướng đúng là thực sự quan trọng. Tôi có thể làm gì ở đây không?

+0

có thể trùng lặp của [Sử dụng PIL để hình ảnh tự động xoay chụp bằng điện thoại di động và accelorometer] (http://stackoverflow.com/questions/12133612/using-pil-to-auto-rotate-picture-taken- với điện thoại di động-và-accelorometer) – Jerzyk

Trả lời

1

Bạn có thể thử một cái gì đó như thế này để thay đổi kích cỡ và tự động xoay (dựa trên thông tin exif) một hình ảnh bằng cách sử dụng 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) 
Các vấn đề liên quan