@drewnoakes drewnoakes released this Nov 24, 2017 · 41 commits to master since this release

Assets 2
  • Add support for AVI files
  • Add support for MP4 files
  • Add support for QuickTime files
  • Add support for EPS files
  • Add support for WAV files
  • Add support for encrypted Nikon makernote tags
  • Add support for IPTC Extended DataSet Tags
  • Add support for PhotoShop paths
  • Extend BMP format support
  • Extend GIF format support
  • Extend detected file types
  • Extend FileType enum to include friendly name, MIME type and expected file extensions
  • Rename FileMetadataReader to FileSystemMetadataReader
  • Various bug fixes

Thanks to all contributors, but especially to @PaytonGarland who is responsible for the vast majority of work in this release.

@drewnoakes drewnoakes released this Mar 8, 2017 · 213 commits to master since this release

Assets 2
  • Extends GIF control directory support (#241)
  • Fixes signed-byte bug introduced in #234 (#243)

@drewnoakes drewnoakes released this Feb 9, 2017 · 219 commits to master since this release

Assets 2


  • Remove storage of thumbnail data in directories


  • Significant extension of GIF support, including embedded comments, XMP and ICC (#222)


  • Fix parsing IPTC dates in Directory.getDate (#212)


  • Extract information about Huffman tables in JPEG files (#231, #234, #239)


  • Improve error recovery when invalid PNG chunk 4CC seen (#206, #207)


  • Support multi-page TIFF (#228)


  • Remove XMP tags (see 5b07a49)
  • Support extended XMP decoding in JPEG, where XMP data is too large for a single JPEG segment (#184, #204)
  • Update XMPCore dependency from version 5.1.2 to 5.1.3 (#194, #188)


  • Support Reconyx Hyper and UltraFire makernotes (#227)
  • Considerably extend Olympus RAW support (#210)
  • Only treat Canon makernote tags as embedded directories if they have the correct type (#116)
  • Extend Sony, Leica, Samsung and Panasonic support (#214)
  • Add support for Apple makernotes
  • Extend Makernote support for Canon, including lens IDs
  • Fix capitalisation in OlympusEquipmentMakernoteDescriptor
  • Fix typo in CanonMakernoteDirectory.TAG_FOCUS_CONTINUOUS descriptor output
  • Don't require IFD0 to be present in order to process makernotes


  • Defer string charset decoding until after extraction, allowing clients to specify alternate encodings (#135, #165#, #166, #191, #192)
  • Improved null value tracking and NRE prevention
  • Use Euclidean Algorithm to simplify Rational values (#226)
  • Introduce Rational.isZero()
  • Make Rational implement Comparable<Rational>
  • Don't share thread-unsafe DecimalFormat instances (#237)
  • Make JAR file executable via Main-Class (#176)
  • Raise minimum Java version from 1.5 to 1.6 (#218)
  • Fix Javadoc for JDK 1.8
  • Remove Ant build file

@drewnoakes drewnoakes released this Apr 20, 2016 · 350 commits to master since this release

Assets 3


  • Potential OutOfMemoryException due to overflow arithmetic errors in TiffReader (@dusan-rychnovsky #167)
  • Off-by-one error in IptcReader when last tag in data was one byte in length (@cshclm #172)


  • Track some hierarchy between Directory instances via getParent().

@drewnoakes drewnoakes released this Apr 5, 2016 · 356 commits to master since this release

Assets 3

This release contains fixes across the entire project uncovered during the creation of the official .NET port of this project. This new implementation was originally ported from Java to C# by Yakov Danilov (for Imazen LLC). Since then it's been heavily refactored. Going forward, it will be kept functionally equivalent to the Java implementation.

Full diff: 2.8.1...2.9.0

New features

  • Support for RAF files df06808 e44bbea b04b20d #73 #109
  • Add support for JFXX (JFIF extension) segments da56f27
  • Add support for "Ducky" segments, from Photoshop's "Save for Web" feature 1416d63 #115
  • Read JFIF thumb width/height tags 2aec48a
  • Process XMP found in Exif tag 0x02BC 6619b7c #157
  • Process sub-IFD found via Exif tag 6fab2ec
  • Support non-standard TIFF format code 13 that points to new IFDs 38efe09 73eeefb
  • Support arrays of IFD pointers within a tag, not just a single pointer d5a254c
  • Process additional XMP tags 75799bb #159
  • Support additional WebP chunk types 4f3d75e 747127e


  • Considerable overhaul of date, time and time zone handling across the library #153 #154 #155 #158
  • Attempt to recover from incorrect JPEG segment length by scanning for next marker 4bac919 #121 #129
  • Incorrect PNG chromaticity 7d0d44e
  • Potential bound exception in PhotoshopDirectory 2a72692 05f67c3
  • Potential bound exception in NikonType2MakernoteDescriptor efa1c4a
  • Incorrect return value from AdobeJpegDescriptor.getDctEncodeVersionDescription 4959b51
  • Typos in PcxDirectory tag names 40d6484
  • Validate Olympus makernote dates 80afe26 a5fdcdf
  • Validate ICC dates so exception won't halt reading 8bfc2e9 185ab46
  • Validate IPTC dates during parsing cee3443
  • Parse IPTC IptcDirectory.TAG_DIGITAL_DATE_CREATED 168a208
  • Non-8BIM Photoshop IRBs don't stop processing ef59b50 #125 #128
  • TiffReader attempts to recover from invalid byte ordering b336b3a #136
  • Correctly handle alternative Olympus makernote preamble 5793c81 73f1a48 #93
  • Clear out fractional seconds from computed dates (PNG and ICC) 2ea2549 #146
  • Fix swapped JpegComponent methods getHorizontalSamplingFactor() and getVerticalSamplingFactor() 6c31782 #156
  • Make GpsDirectory.getGpsDate() locale independent 29e95df #160 #161
  • Make PngMetadataReaderTest locale independent e0eb4b2 #162 #163

Description formats

  • Standardisation of f-stop descriptions 45f1e10 0b5d3f9 f796031
  • Change formatting of focal length descriptions 120cd80
  • Use offset in date descriptions, not timezone name 8e4ffb2
  • ICC value formats e6ab7b4 40d60fb
  • Fix typo in 'fluorescent' in ExifDescriptorBase 21a5391
  • Remove trailing space in PhotoshopDescriptor output 674c609
  • Remove trailing full stop in ExifDescriptorBase output d7a0cf3
  • Number formatting in Olympus makernote descriptions fb1997e
  • Don't show lens f-stop range when upper and lower values are identical b74aca1
  • Update shutter speed value formatting e879944
  • Describe ExifDescriptorBase.TAG_LENS_SPECIFICATION be55336
  • Capitalise the name of XmpDirectory 4777af1

API changes

  • Deprecate ExifThumbnailDirectory.TAG_THUMBNAIL_COMPRESSION 825c439 12f023a 4e084ca
  • Remove unused class DefaultTagDescriptor feafc8f
  • Fix typos in some OlympusMakernoteDescriptor description methods 3162299
  • In GifHeaderDirectory replace TAG_TRANSPARENT_COLOR_INDEX with TAG_BACKGROUND_COLOR_INDEX f27dc5d 7ac3b9a #142
  • In JfifDirectory replace getImageWidth/Height with getResX/Y e458489 #143
  • Deprecate ExifDirectoryBase's TAG_LIGHT_SOURCE in favour of TAG_WHITE_BALANCE e298fde


  • Considerable improvement when reading large TIFF files (such as raw files) using ImageMetadataReader 0c7c577 #164
  • Perform type check outside loop b3e2f9b
  • Use Collections.singletonList instead of Arrays.asList with single item 4cb5200
  • Slightly reduce allocations in PNG reader 455a83a
  • Simplify Tag.getTagTypeHex() 54cb1a8

Miscellaneous changes

  • Metadata stores and returns Directory instances in the order they were created bb9a290
  • FileTypeDetector throws if stream doesn't support mark/reset 6a6727c
  • unexpected PNG ICC compression method is registered as an error e2b6a39
  • Project now has an SVG logo which looks better on high DPI displays b4572a3
  • Bump junit version 8debfd8
  • Make Javadoc compilable under Java 8 1ef9bf9 #137
  • Many documentation and internal fixes

@drewnoakes drewnoakes released this Apr 20, 2015 · 537 commits to master since this release

Assets 3
  • When a parsing date with no timezone specified, don't use default (assume UTC/GMT) (#97)
  • Formatting of f/stop descriptions changed to f/2.8 instead of F2.8(#97)
  • Extend Exif exposure program decoding (#97)
  • Add Canon LensType tag (#97)
  • Handle XMP data with different (erroneous yet common) preamble in JPEG files (#102)

@drewnoakes drewnoakes released this Mar 22, 2015 · 553 commits to master since this release

Assets 3
  • WebP support (#85)
  • File system metadata (#86)
  • ICO file support (#61)
  • PCX support (#89)
  • Improve Exif tag comprehension across directory types (#3, #8, #9, #82, #83)
  • Support PNG sBIT and pHYs chunks
  • Extract tEXt and iTXt chunks from PNG (#62)
  • Metadata may now hold multiple instances of a Directory subclass (#61, #65)
  • Improve date/time formatting of EXIF-GPS and IPTC data
  • Detect new file types: RIFF (#85), PCX (#89), ICO (#61), additional ORF format
  • Read image resources from Photoshop data (#87)
  • Fix decoding of 8BIM Photoshop strings (#57)
  • Process EXIF, ICC and XMP data embedded in Photoshop data (#88)
  • Extend XMP support (#92)
  • Extend Olympus makernote support (#93)

@drewnoakes drewnoakes released this Jan 30, 2015 · 638 commits to master since this release

Assets 3
  • Bug Fixes
    • Fix Tag.hasTagName() to return a boolean

@drewnoakes drewnoakes released this Jan 26, 2015 · 641 commits to master since this release

Assets 3
  • Fixes
    • Fix exception related to IPTC character encoding
    • Fix exception caused by zero-length IPTC tags
    • Mute exceptions about PNG chunks we don't even process
  • Improvements
    • Decode more IPTC version tags correctly
    • Add Tag.hasTagName() and Directory.hasTagName(int) methods
    • Extract file type detection to reusable FileTypeDetector class
    • Make file type detection more rigorous
    • Detect camera RAW formats (still treated as Exif TIFF)
  • API changes
    • Rename PngDirectory.TAG_PROFILE_NAME to PngDirectory.TAG_ICC_PROFILE_NAME
    • Removed ExifReader's TIFF processing functions. Use TiffReader instead.
  • Project
    • Regression test data set increased significantly

@drewnoakes drewnoakes released this Dec 7, 2014 · 693 commits to master since this release

Assets 3
  • Features
    • Added support for PNG, GIF and BMP files.
    • Added makernote support for:
      • Leica
      • Sanyo
      • Ricoh
    • Support for character encoding in IPTC data.
    • Extract IPTC data found in Exif chunks.
  • Improvements
    • Optimised JPEG processing, avoiding unnecessary IO.
    • Improved makernote support for:
      • Canon
      • Fujifilm
      • Kodak
      • Panasonic
      • Olympus
      • Sigma
      • Sony
    • Javadoc improvements.
    • Many more unit tests.
  • Bug Fixes
    • Fixed incorrect rejection of rare but correct JPEG files.
    • Unit tests work across cultures.
    • Fixed bug in Lat/Lng coordinates containing a zero value.
  • API Changes
    • Some Casio*.TAG_CASIO_* renamed to Casio*.TAG_*
    • Some Olympus*.TAG_OLYMPUS_* renamed to Olympus*.TAG_*
    • Some Gps*.TAG_GPS_* renamed to Gps*.TAG_*
  • Project
    • Migrated project to GitHub.
    • Added Maven pom.xml project file.
    • Targeting JDK 1.5 instead of 1.6.
    • Update XMPCore to version 5.1.2.
    • Update junit to version 4.11.0
    • Introduce Travis-CI build

There are many changes in this release. Please open an issue if you encounter an API change which is not listed here.