#!/usr/bin/awk -f # # append-exifdata -- append EXIF data (rotation, time, GPS) to generate makehtmlgallery list # # usage: ( cd 301-ipn4-ncd3s ; ls *.jpg ) | append-exifdata srcdir=301-ipn4-ncd3s hrsoff=0 > ipn4.list # # http://www.heikopurnhagen.net/software/append-exifdata # # This program is available under the terms of the GNU General Public # License (GPL). All usual disclaimers apply! # # Heiko Purnhagen (mail@heikopurnhagen.net) # HP 20101030 based on append-rot-date-gps-off function ll2hm(latlonstr) { split(latlonstr,latlonar); lat = 0+latlonar[1]; lon = 0+latlonar[2]; latNS = "N"; if (lat < 0) { latNS = "S"; lat = -lat; } lonEW = "E"; if (lon < 0) { lonEW = "W"; lon = -lon; } lati = int(lat); loni = int(lon); return sprintf("%02d° %06.3f' %s, %03d° %06.3f' %s",lati,60*(lat-lati),latNS,loni,60*(lon-loni),lonEW); } BEGIN { srcdir = "."; hrsoff = 0; split("0 0 180 0 0 90 0 270",oriar); } { sori = ""; sdatetime = ""; sfiletime = ""; sgpspos = ""; sgpsalt = ""; sgpsdir = ""; sgpstime = ""; getexif = "exiftool -s -s -s -f -n -Orientation -DateTimeOriginal -FileModifyDate -GPSPosition -GPSAltitude -GPSImgDirection -GPSDateTime " srcdir "/" $1; getexif | getline sori; getexif | getline sdatetime; getexif | getline sfiletime; getexif | getline sgpspos; getexif | getline sgpsalt; getexif | getline sgpsdir; getexif | getline sgpstime; close(getexif); if (sori == "-") { pori = "0"; } else { pori = oriar[sori]; } printf "%s %s",$1,pori; if (sdatetime == "-") { if (sfiletime == "-") { printf " %s",$1; } else { pdatetime = strftime("%a %F %T",mktime(gensub(":"," ","g",substr(sfiletime,1,19)))+3600*hrsoff); printf " %s",pdatetime; } } else { pdatetime = strftime("%a %F %T",mktime(gensub(":"," ","g",sdatetime))+3600*hrsoff); printf " %s",pdatetime; } if (sgpspos == "-") { printf "\n"; } else { pgpspos = ll2hm(sgpspos); ggpspos = gensub("°","","g",gensub("'","","g",gensub(",","","g",pgpspos))); gpslink = "http://maps.google.com/maps?t=h&q=" gensub(" ","+","g",ggpspos); gpsdisp = pgpspos; if (sgpsalt != "-") { gpsdisp = gpsdisp ", " sgpsalt " m"; } if (sgpsdir != "-") { gpsdisp = gpsdisp ", " sprintf("%03d",int(sgpsdir+0.5)) "°"; } if (sgpstime != "-") { pgpstime = substr(sgpstime,1,4) "-" substr(sgpstime,6,2) "-" substr(sgpstime,9,11) " UTC"; gpsdisp = gpsdisp ", " pgpstime; } gpscmnt = gensub(" ","+","g",pdatetime " GPS: " gpsdisp); printf " %s\n","GPS: " gpsdisp; } } #--