Skip to content

Instantly share code, notes, and snippets.

@ujihisa
Created February 23, 2013 22:44
Show Gist options
  • Save ujihisa/5021684 to your computer and use it in GitHub Desktop.
Save ujihisa/5021684 to your computer and use it in GitHub Desktop.
(ns aaa.core
(:import [java.io File]
[org.apache.sanselan ImageReadException Sanselan]
[org.apache.sanselan.common IImageMetadata, RationalNumber]
[org.apache.sanselan.formats.jpeg JpegImageMetadata]
[org.apache.sanselan.formats.tiff TiffField TiffImageMetadata]
[org.apache.sanselan.formats.tiff.constants ExifTagConstants
GPSTagConstants TagInfo TiffConstants TiffTagConstants])
(:gen-class))
(defn print-tag-value [metadata tagInfo]
(if-let [field (.findEXIFValue metadata tagInfo)]
(println (str " (" (.name tagInfo) ": " (.getValueDescription field)))
(println (str " (" (.name tagInfo) " not found.)"))))
(defn readexif [file]
(let [metadata (Sanselan/getMetadata file)]
(when (nil? metadata)
(println "\tNo EXIF metdata was found"))
(when (instance? JpegImageMetadata metadata)
(println " -- Standard EXIF Tags")
(print-tag-value metadata (TiffTagConstants/TIFF_TAG_XRESOLUTION))
(print-tag-value metadata (TiffTagConstants/TIFF_TAG_DATE_TIME))
(print-tag-value metadata (ExifTagConstants/EXIF_TAG_DATE_TIME_ORIGINAL))
(print-tag-value metadata (ExifTagConstants/EXIF_TAG_CREATE_DATE))
(print-tag-value metadata (ExifTagConstants/EXIF_TAG_ISO))
(print-tag-value metadata (ExifTagConstants/EXIF_TAG_SHUTTER_SPEED_VALUE))
(print-tag-value metadata (ExifTagConstants/EXIF_TAG_APERTURE_VALUE))
(print-tag-value metadata (ExifTagConstants/EXIF_TAG_BRIGHTNESS_VALUE))
(print-tag-value metadata (GPSTagConstants/GPS_TAG_GPS_LATITUDE_REF))
(print-tag-value metadata (GPSTagConstants/GPS_TAG_GPS_LATITUDE))
(print-tag-value metadata (GPSTagConstants/GPS_TAG_GPS_LONGITUDE_REF))
(print-tag-value metadata (GPSTagConstants/GPS_TAG_GPS_LONGITUDE_REF))
; simple interface to GPS data
(println " -- GPS Info")
(when-let [exifMetadata (.getExif metadata)]
(when-let [gpsInfo (.getGPS exifMetadata)]
(let [longitude (.getLongitudeAsDegreesEast gpsInfo)
latitude (.getLatitudeAsDegreesNorth gpsInfo)]
(println (str " GPS Description: " gpsInfo))
(println (str " GPS Longitude (Degrees East):" longitude))
(println (str " GPS Latitude (Degrees North):" latitude)))))
; Print all EXIF data
(println " -- All EXIF info")
(doseq [item (.getItems metadata)]
(println (str " " item)))
(println))))
(defn -main []
(let [file (File. "P1030514.JPG")]
(prn 'file (.getPath file))
(readexif file)))
(defproject aaa "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.4.0"]
[org.apache.sanselan/sanselan "0.97-incubator"]]
:main aaa.core)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment