Django rotates iphone image after boot

I work on a photo site where I want the user to be able to upload portrait or landscape photographs. The maximum width should be 1250px, but the maximum height can be 1667px if it is in portrait mode. When I upload photos in portrait orientation, they are displayed 90 degrees to the left. Is there a way to use a pillow to make sure the photo stays in the correct orientation?

This is my 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() 

It’s important that users can upload photos from their phones while they’re mobile, so proper orientation is really important. Can I do anything here?

+5
source share
1 answer

You can try something like this to resize and automatically rotate (based on exif information) the image with a 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 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) 
+1
source

All Articles