set EXIF orientation of source file when rotating
authorgc <gc>
Sun, 3 Feb 2008 22:17:23 +0000 (22:17 +0000)
committergc <gc>
Sun, 3 Feb 2008 22:17:23 +0000 (22:17 +0000)
bin/booh
bin/booh-classifier
lib/booh/booh-lib.rb

index fb80660..b7e3302 100755 (executable)
--- a/bin/booh
+++ b/bin/booh
@@ -123,6 +123,7 @@ def read_config
             $config['mproc'] = cpus
         end
     end
+    $config['rotate-set-exif'] ||= 'true'
     $tempfiles = []
     $todelete = []
 end
@@ -465,7 +466,12 @@ def rotate_real(angle, thumbnail_img, img, xmlelem, attributes_prefix, desired_x
     $modified = true
 
     #- update rotate attribute
-    xmlelem.add_attribute("#{attributes_prefix}rotate", ((xmlelem.attributes["#{attributes_prefix}rotate"].to_i + angle) % 360).to_s)
+    new_angle = (xmlelem.attributes["#{attributes_prefix}rotate"].to_i + angle) % 360
+    xmlelem.add_attribute("#{attributes_prefix}rotate", new_angle.to_s)
+
+    if $config['rotate-set-exif'] == 'true'
+        Exif.set_orientation(from_utf8($current_path + '/' + xmlelem.attributes['filename']), angle_to_exif_orientation(new_angle))
+    end
 
     $modified_pixbufs[thumbnail_img] ||= {}
     $modified_pixbufs[thumbnail_img][:angle_to_orig] = (($modified_pixbufs[thumbnail_img][:angle_to_orig] || 0) + angle) % 360
@@ -3636,6 +3642,11 @@ Where tag can be one of the following:
     SceneType")), { :scrolled => true })
     }
 
+    tbl.attach(update_exif_orientation_check = Gtk::CheckButton.new(utf8(_("Update file's EXIF orientation when rotating a picture"))),
+               0, 2, 2, 3, Gtk::FILL, Gtk::SHRINK, 2, 2)
+    tooltips.set_tip(update_exif_orientation_check, utf8(_("When rotating a picture (Alt-Right/Left), also update EXIF orientation in the file itself")), nil)
+    update_exif_orientation_check.active = $config['rotate-set-exif'] == 'true'
+
     dialog.vbox.show_all
     dialog.run { |response|
         if response == Gtk::Dialog::RESPONSE_OK
@@ -3652,6 +3663,7 @@ Where tag can be one of the following:
 
             $config['convert-enhance'] = from_utf8(enhance_entry.text)
             $config['comments-format'] = from_utf8(commentsformat_entry.text.gsub(/'/, ''))
+            $config['rotate-set-exif'] = update_exif_orientation_check.active?.to_s
         end
     }
     dialog.destroy
index f64afe4..64a789b 100644 (file)
@@ -128,7 +128,7 @@ def read_config
     $config['browser'] ||= "/usr/bin/mozilla-firefox -remote 'openURL(%f,new-window)' || /usr/bin/mozilla-firefox %f"
     $config['preload-distance'] ||= '5'
     $config['cache-memory-use'] ||= 'memfree_80%'
-#    $config['rotate-set-exif'] ||= 'true'
+    $config['rotate-set-exif'] ||= 'true'
     set_cache_memory_use_figure
 end
 
@@ -710,6 +710,9 @@ def thumbnail_keypressed(entry, event)
             entry.free_pixbuf_thumbnail
             $mainview.redraw
             entry.image.pixbuf = entry.pixbuf_thumbnail
+            if $config['rotate-set-exif'] == 'true'
+                Exif.set_orientation(entry.path, angle_to_exif_orientation(entry.angle))
+            end
         end
 
     elsif event.state & Gdk::Window::CONTROL_MASK != 0
@@ -1357,10 +1360,10 @@ def preferences
         cache_specify_spin.value = $config['cache-memory-use'].to_i
     end
 
-#    tbl.attach(update_exif_orientation_check = Gtk::CheckButton.new(utf8(_("Update file's EXIF orientation when rotating a picture"))),
-#               0, 2, 4, 5, Gtk::FILL, Gtk::SHRINK, 2, 2)
-#    tooltips.set_tip(update_exif_orientation_check, utf8(_("When rotating a picture (Alt-Right/Left), also update EXIF orientation in the file itself")), nil)
-#    update_exif_orientation_check.active = $config['rotate-set-exif']
+    tbl.attach(update_exif_orientation_check = Gtk::CheckButton.new(utf8(_("Update file's EXIF orientation when rotating a picture"))),
+               0, 2, 4, 5, Gtk::FILL, Gtk::SHRINK, 2, 2)
+    tooltips.set_tip(update_exif_orientation_check, utf8(_("When rotating a picture (Alt-Right/Left), also update EXIF orientation in the file itself")), nil)
+    update_exif_orientation_check.active = $config['rotate-set-exif'] == 'true'
 
     dialog.vbox.show_all
     dialog.run { |response|
@@ -1368,7 +1371,7 @@ def preferences
             $config['video-viewer'] = from_utf8(video_viewer_entry.text)
             $config['browser'] = from_utf8(browser_entry.text)
             $config['preload-distance'] = preload_distance.value
-#            $config['rotate-set-exif'] = update_exif_orientation_check.active?
+            $config['rotate-set-exif'] = update_exif_orientation_check.active?.to_s
             if cache_memfree_radio.active?
                 $config['cache-memory-use'] = "memfree_#{cache_memfree_spin.value}%"
             else
index 0f4ca1d..45bbb8b 100644 (file)
@@ -282,6 +282,16 @@ module Booh
         end
     end
 
+    def angle_to_exif_orientation(angle)
+        if angle == 90
+            return 6
+        elsif angle == 270 || angle == -90
+            return 8
+        else
+            return 0
+        end
+    end
+
     def rotate_pixbuf(pixbuf, angle)
         return pixbuf.rotate(angle ==  90 ? Gdk::Pixbuf::ROTATE_CLOCKWISE :
                              angle == 180 ? Gdk::Pixbuf::ROTATE_UPSIDEDOWN :