view plugins/rotate/geeqie-rotate @ 1717:61bd3a2f633d

added possibility to use geeqie-rotate as a standalone script
author nadvornik
date Sun, 13 Sep 2009 09:55:21 +0000
parents 34c71cbbbd26
children
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
}

get_sidecars=
if [ "x$1" == "x-g" ] ; then
    get_sidecars=yes
    shift
fi

# iterate over files on commandline
for file in "$@" ; do
    if [ -n "$get_sidecars" ] ; then
        # 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
    else
        rotate "$file"
    fi
done