view plugins/rotate/geeqie-rotate @ 1647:2a779a1855d7

improved rotation script - applies the orientation from metadata - uses exiftran for jpeg an ImageMagick for other files
author nadvornik
date Mon, 15 Jun 2009 19:13:45 +0000
parents 5b36a6ff55ae
children a15dc91173b4
line wrap: on
line source

#!/bin/bash -x

# This is a helper script that rotate image files according to the metadata
# requirements: ImageMagick, exiftran, exiv2

GQ_METADATA_DIR="$HOME/.local/share/geeqie/metadata"

rotate()
{
    ext=`echo "${1##*.}" |tr "[:upper:]" "[:lower:]"`
    [ "x$ext" == "x" ] && return 1 #no extension

    gq_metadata="$GQ_METADATA_DIR/$1.gq.xmp"
    if [ -f "$gq_metadata" ]; then
	gq_orientation=`exiv2 -PXkv "$gq_metadata"|grep Xmp.tiff.Orientation|sed -e "s|Xmp.tiff.Orientation *||"`
    else
	gq_orientation=
    fi

    case "$ext" in
	jpg|jpeg) 
		[ -n "$gq_orientation" ] && exiv2 -M "set Exif.Image.Orientation $gq_orientation" "$1"
		if exiftran -aip "$1" ; then
		    # exiftran ignores xmp, set it manually
		    exiv2 -M "set Xmp.tiff.Orientation 1" "$1"
		    #http://dev.exiv2.org/issues/show/639
		    [ -n "$gq_orientation" ] && exiv2 -M "set Xmp.tiff.Orientation 1" \
		                                      -M "set Exif.Image.Orientation 1" "$gq_metadata"
		    return 0
		fi
		;;
	
	tif|tiff|png)
		[ -n "$gq_orientation" ] && exiv2 -M "set Exif.Image.Orientation $gq_orientation" "$1"
		if mogrify -auto-orient "$1" ; then
		    # mogrify ignores xmp, set it manually
		    exiv2 -M "set Xmp.tiff.Orientation 1" "$1"
		    #http://dev.exiv2.org/issues/show/639
		    [ -n "$gq_orientation" ] && exiv2 -M "set Xmp.tiff.Orientation 1" \
		                                      -M "set Exif.Image.Orientation 1" "$gq_metadata"
		    return 0
		fi
		;;
	*)	#not supported
		return 0
		;;
    esac
}

# iterate over files on commandline
for file in "$@" ; do
    # we got only one file for each group, typically the main one
    # get the sidecars:
    geeqie -r --get-sidecars:"$file" |while read sidecar ; do
	# the main file is included in the sidecar file list, no special handling is required
	rotate "$sidecar"
    done
done