#!/bin/sh # # Description - convert RAW photos to JPEG with Exif # # Developed by Lubomir Host 'rajo' # Copyright (c) 2009-2009 Platon Group, http://platon.sk/ # Licensed under terms of GNU General Public License. # All rights reserved. # # Changelog: # 2009-08-05 - created # # $Platon: scripts/shell/photo-managment/foto-copy,v 1.3 2009-01-12 23:17:07 rajo Exp $ # howto rename your files: img_1234.jpg --> 2006-08-13_230001_img_1234.jpg (image taken on 2006-08-13 23:00:01) JHEAD_OPTS="-n%Y-%m-%d_%H%M%S_%f" # paths setup: JHEAD="jhead" DCRAW="dcraw" EXIV2="exiv2" PPMTOJPEG="ppmtojpeg" # lossless rotation of JPEG files do_rotation() { # {{{ rrfile="$1" degres="$2" echo -e "\t--> rotating $degres $rrfile" if jpegtran -rotate $degres -copy all -outfile ${rrfile}_tmp ${rrfile}; then echo -e "\t\tRotated" mv ${rrfile}_tmp ${rrfile} $EXIV2 -M'del Exif.Image.Orientation' $rrfile else echo -e "\t\tFailed" rm ${rrfile}_tmp fi } # }}} # distinguish angle of rotation rotate_jpeg() { # {{{ rfile="$1" orient=`$EXIV2 -P kyv $rfile | awk '/Exif.Image.Orientation/ { print $3; }'` case "$orient" in 1) echo "$rfile: Orientation: $orient top left"; ;; 6) echo "$rfile: Orientation: $orient right top"; do_rotation $rfile 90 ;; 8) echo "$rfile: Orientation: $orient left bottom"; do_rotation $rfile 270 ;; *) echo "$rfile: Orientation: $orient UNKNOWN"; ;; esac } # }}} for i in $*; do # {{{ [ "x$i" = "x*.crw" ] && continue [ "x$i" = "x*.cr2" ] && continue file=${i%.crw} file=${file%.cr2} if [ ! -f "$file.jpg" ]; then echo --- $i; $DCRAW -w $i # use white ballance set by camera $PPMTOJPEG $file.ppm > $file.jpg && rm -f $file.ppm ; fi # set EXIF information: rm -f $file.exv $file-thumb.jpg $EXIV2 ex $i [ -f $file.thm ] && ln -s $file.thm $file-thumb.jpg # doesn't work correctly #$EXIV2 -it $file.thm $file.jpg # use Exif info from *.thm file otherwise from *.crw file if [ -f "$file.thm" ]; then $EXIV2 -P kyv $file.thm | awk 'NF > 2 { print; }' | sed 's/^/set /g;' > $file.cmd else $EXIV2 -P kyv $i | awk 'NF > 2 { print; }' | sed 's/^/set /g;' > $file.cmd fi $EXIV2 -m $file.cmd $file.jpg # fix: Canon EOS 300D Digital Rebel stores wrong Exif.Image.Orientation info *.thm files # Exif.Image.Orientation needs to be read from RAW image #$EXIV2 -P kyv $file.crw | awk '/Exif.Image.Orientation/ { print; }' | sed 's/^/set /g;' > $file.cmd #$EXIV2 -m $file.cmd $file.jpg # rotate image if needed - we don't need rotate this JPEG file, because # orientation will be fixed if Exif.Image.Orientation Exif tag is removed. #rotate_jpeg $file.jpg # remove incorrect Exif headers (taken from thumbnail or after rotation) $EXIV2 \ -M'del Exif.Image.XResolution' \ -M'del Exif.Image.YResolution' \ -M'del Exif.Image.Orientation' \ $file.jpg # rename $JHEAD $JHEAD_OPTS $file.jpg # cleanup rm -f $file-thumb.jpg rm -f $file.exv rm -f $file.cmd done # }}} # vim: fdm=marker fdl=0 fdc=3