]> git.eshelyaron.com Git - emacs.git/commitdiff
Automatically rotate images in image-mode based on Exif data
authorLars Ingebrigtsen <larsi@gnus.org>
Sun, 22 Sep 2019 12:21:39 +0000 (14:21 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 22 Sep 2019 12:21:47 +0000 (14:21 +0200)
* lisp/image-mode.el (image-toggle-display-image): Get the
orientation from the Exif data, if any.

lisp/image-mode.el

index fae928f4e67564cf24dff50e256de889fd1ccc42..aaec9026e570ea7458e6bd206f666a2ac988b483 100644 (file)
@@ -39,6 +39,7 @@
 ;;; Code:
 
 (require 'image)
+(require 'exif)
 (eval-when-compile (require 'cl-lib))
 
 ;;; Image mode window-info management.
@@ -744,17 +745,25 @@ was inserted."
         (type (if (image--imagemagick-wanted-p filename)
                   'imagemagick
                 (image-type file-or-data nil data-p)))
-         ;; :scale 1: If we do not set this, create-image will apply
-         ;; default scaling based on font size.
-        (image (if (not edges)
+        (inhibit-read-only t)
+        (buffer-undo-list t)
+        (modified (buffer-modified-p))
+        props image)
+
+    ;; Get the rotation data from the file, if any.
+    (setq image-transform-rotation
+          (or (exif-orientation
+               (ignore-error exif-error
+                 (exif-parse-buffer)))
+              0.0))
+
+    ;; :scale 1: If we do not set this, create-image will apply
+    ;; default scaling based on font size.
+    (setq image (if (not edges)
                    (create-image file-or-data type data-p :scale 1)
                  (create-image file-or-data type data-p :scale 1
                                :max-width (- (nth 2 edges) (nth 0 edges))
                                :max-height (- (nth 3 edges) (nth 1 edges)))))
-        (inhibit-read-only t)
-        (buffer-undo-list t)
-        (modified (buffer-modified-p))
-        props)
 
     ;; Discard any stale image data before looking it up again.
     (image-flush image)