1c1184e0d04fe7305c4030e4c1cdbadbdf199f01
[geeqie.git] / plugins / rotate / geeqie-rotate
1 #!/bin/sh
2
3 # This is a helper script that rotate image files according to the metadata
4 # requirements: ImageMagick, exiftran, exiv2
5
6 GQ_METADATA_DIR="$HOME/.local/share/geeqie/metadata"
7
8 rotate()
9 {
10     ext=`echo "${1##*.}" |tr "[:upper:]" "[:lower:]"`
11     [ "x$ext" = "x" ] && return 1 #no extension
12
13     gq_metadata="$GQ_METADATA_DIR/$1.gq.xmp"
14     if [ -f "$gq_metadata" ]; then
15         gq_orientation=`exiv2 -PXkv "$gq_metadata"|grep Xmp.tiff.Orientation|sed -e "s|Xmp.tiff.Orientation *||"`
16     else
17         gq_orientation=
18     fi
19
20     case "$ext" in
21         jpg|jpeg) 
22                 [ -n "$gq_orientation" ] && exiv2 -M "set Exif.Image.Orientation $gq_orientation" "$1"
23                 if exiftran -aip "$1" ; then
24                     # exiftran ignores xmp, set it manually
25                     exiv2 -M "set Xmp.tiff.Orientation 1" "$1"
26                     #http://dev.exiv2.org/issues/show/639
27                     [ -n "$gq_orientation" ] && exiv2 -M "set Xmp.tiff.Orientation 1" \
28                                                       -M "set Exif.Image.Orientation 1" "$gq_metadata"
29                     return 0
30                 fi
31                 ;;
32         
33         tif|tiff|png)
34                 [ -n "$gq_orientation" ] && exiv2 -M "set Exif.Image.Orientation $gq_orientation" "$1"
35                 if mogrify -auto-orient "$1" ; then
36                     # mogrify ignores xmp, set it manually
37                     exiv2 -M "set Xmp.tiff.Orientation 1" "$1"
38                     #http://dev.exiv2.org/issues/show/639
39                     [ -n "$gq_orientation" ] && exiv2 -M "set Xmp.tiff.Orientation 1" \
40                                                       -M "set Exif.Image.Orientation 1" "$gq_metadata"
41                     return 0
42                 fi
43                 ;;
44         *)      #not supported
45                 return 0
46                 ;;
47     esac
48 }
49
50 get_sidecars=
51 if [ "x$1" = "x-g" ] ; then
52     get_sidecars=yes
53     shift
54 fi
55
56 # iterate over files on commandline
57 for file in "$@" ; do
58     if [ -n "$get_sidecars" ] ; then
59         # we got only one file for each group, typically the main one
60         # get the sidecars:
61         geeqie -r --get-sidecars:"$file" |while read sidecar ; do
62             # the main file is included in the sidecar file list, no special handling is required
63             rotate "$sidecar"
64         done
65     else
66         rotate "$file"
67     fi
68 done
69