: ########################################################################## # Title : exifinfo - print EXIF information of an image file # Author : Heiner Steven # Date : 2004-01-09 # Category : Graphics # Requires : identify # SCCS-Id. : @(#) exifinfo 1.4 13/05/01 ########################################################################## # Description # # Caveats # o EXIF tags that would result in invalid shell variable names # should be rewritten, e.g. by replacing invalid characters with a # '_' character # o Individual tag names (e.g. "ImageWidth") should be allowed # # Bibiliography # o exif.org: "Specifications" # http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html # o TsuruZoh Tachibanaya: "Description of Exif file format", # http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html # # Output example (identify 5.5.4) # EXIF_Make='EASTMAN KODAK COMPANY' # EXIF_Model='KODAK DX4530 ZOOM DIGITAL CAMERA' # EXIF_Orientation='1' # EXIF_XResolution='230/1' # EXIF_YResolution='230/1' # EXIF_ResolutionUnit='2' # EXIF_YCbCrPositioning='1' # EXIF_ExifOffset='506' # EXIF_ExposureTime='1/30' # EXIF_FNumber='28/10' # EXIF_ExposureProgram='2' # EXIF_ExifVersion='0220' # EXIF_DateTimeOriginal='2003:01:03 08:41:52' # EXIF_DateTimeDigitized='2003:01:03 08:41:52' # EXIF_ComponentsConfiguration='...' # EXIF_ShutterSpeedValue='50/10' # EXIF_ApertureValue='3/1' # EXIF_ExposureBiasValue='0/1000' # EXIF_MaxApertureValue='30/10' # EXIF_MeteringMode='5' # EXIF_LightSource='0' # EXIF_Flash='25' # EXIF_FocalLength='80/10' # EXIF_MakerNote='KDK0002IDX4530 ..' # EXIF_FlashPixVersion='0100' # EXIF_ColorSpace='1' # EXIF_ExifImageWidth='2580' # EXIF_ExifImageLength='1932' # EXIF_InteroperabilityOffset='2320' # EXIF_unknown='R98' # EXIF_unknown='0100' # EXIF_ExposureIndex='140/1' # EXIF_SensingMethod='2' # EXIF_FileSource='.' # EXIF_SceneType='.' # EXIF_unknown='0' # EXIF_unknown='0' # EXIF_unknown='0' # EXIF_unknown='0/100' # EXIF_unknown='38' # EXIF_unknown='0' # EXIF_unknown='1' # EXIF_unknown='0' # EXIF_unknown='0' # EXIF_unknown='0' # EXIF_unknown='0' ########################################################################## PN=`basename "$0"` # Program name VER='1.4' usage () { echo >&2 "$PN - print EXIF information of an image file, $VER usage: $PN [-p prefix] image [image ...] -p: variable prefix (default is \"EXIF_\") Prints the EXIF information from the image files. The output is printed as "var=value" pairs in a way suitable as input to the shell, e.g. eval \`$PN image.jpg\` can be used to set variables e.g. \"EXIF_ExifVersion\". Note that EXIF tags with names that would be invalid shell variable names are silently ignored." exit 1 } msg () { for MsgLine do echo "$PN: $MsgLine" >&2 done } fatal () { msg "$@"; exit 1; } Prefix= while getopts :hp: opt do case "$opt" in p) Prefix=$OPTARG;; h) usage;; ?) usage;; esac done shift `expr $OPTIND - 1` [ $# -lt 1 ] && usage prefix=${Prefix:-EXIF_} info='*' for file do # Explanation of the "sed" expressions: # o remove all lines not containing a "=" # o remove "exif:" prefix appearing with e.g. identify(1) 6.7.7 # o remove all lines containing tag names that would form invalid # shell variable names # o quote all apostrophy characters ' as '\'' # o add an apostrophy at the front and the end of the value # string # o write the variable name prefix in front of each variable identify -format "%[EXIF:$info]" "$file" | sed \ -e 's/^exif://g' \ -e '/^[^=]*$/d' \ -e '/[^A-Za-z0-9_=][^=]*=/d' \ -e "s/'/'\\\\''/g" \ -e "s/=/='/" \ -e "s/\$/'/" \ -e "s/^/$prefix/" done