Justin Driscoll avatar Justin Driscoll committed e2fe002

Added 'auto' method to Transpose processor

Comments (0)

Files changed (1)

imagekit/processors.py

         - ROTATE_90
         - ROTATE_270
         - ROTATE_180
+        - auto
+        
+    If method is set to 'auto' the processor will attempt to rotate the image
+    according to the EXIF Orientation data.
         
     """
-    method = 'FLIP_LEFT_RIGHT'
+    EXIF_ORIENTATION_STEPS = {
+        1: [],
+        2: ['FLIP_LEFT_RIGHT'],
+        3: ['ROTATE_180'],
+        4: ['FLIP_TOP_BOTTOM'],
+        5: ['ROTATE_270', 'FLIP_LEFT_RIGHT'],
+        6: ['ROTATE_270'],
+        7: ['ROTATE_90', 'FLIP_LEFT_RIGHT'],
+        8: ['ROTATE_90'],
+    }
+    
+    method = 'auto'
     
     @classmethod
     def process(cls, img, fmt, obj):
-        img = img.transpose(getattr(Image, cls.method))
+        if cls.method == 'auto':
+            orientation = Image.open(obj._imgfield.file)._getexif()[0x0112]
+            ops = cls.EXIF_ORIENTATION_STEPS[orientation]
+        else:
+            ops = [cls.method]
+        for method in ops:
+            img = img.transpose(getattr(Image, method))
         return img, fmt
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.