Skip to content

Releases: drewnoakes/metadata-extractor

v2.6.2

20 Nov 14:24
Compare
Choose a tag to compare

Released 28 May 2012

  • Fixed a bug in RandomAccessFileReader which would result in string values failing to read correctly from files. Thanks to Bruce Grant for reporting this issue.

v2.6.1

20 Nov 14:24
Compare
Choose a tag to compare

Released 24 May 2012

  • Fixed a bug in CanonMakernoteDescriptor.getFlashDetailsDescription() where the description was shown as a meaningless integer instead of a string such as "Internal flash" or "External E-TTL"

v2.6.0

20 Nov 14:23
Compare
Choose a tag to compare

Released 22 May 2012

Highlights:

  • Much faster processing of large TIFF files
  • Easier use of GPS data
  • Basic support for PSD files

Detail:

  • Added GeoLocation type and updated the means of extracting GPS data from the GpsDirectory
  • Added a new sample application which produces Google Maps HTML for a directory of photos which contain GPS data
  • Converted BufferReader from a class to an interface, renaming the prior implementation as ByteArrayReader
  • Created a new RandomAccessFileReader which allows the processing of files without loading the whole file into memory
  • Added PsdMetadataReader, PsdReader, PsdHeaderDirectory and PsdHeaderDescriptor classes which offer some basic support for PSD files
  • Changed base class's MetadataReader.extract method to take a BufferReader instead of a byte[]

v2.5.1

20 Nov 14:23
Compare
Choose a tag to compare

Released 20 May 2012

  • Proper handling of all signed/unsigned integer types supported by Exif and Tiff data in general
  • Fixed bug in processing of unsigned rational values
  • Converted project hosting from SVN to Git
  • Rearranged project structure slightly
    • Tests now have their own folder
    • Sample code now has its own folder

v2.5.0

20 Nov 14:22
Compare
Choose a tag to compare

RC1

Released 9 May 2011

  • New metadata support
    • Added support for XMP metadata
    • Added support for Photoshop metadata embedded in Jpeg files
    • Added support for ICC colour profiles
    • Added support for JFIF metadata
    • Added many more tags to IPTC directory
  • Makernotes
    • Improved support for Panasonic makernotes, including decoding of detected and recognised faces in images
    • Wider support for Canon makernote data
    • Renamed existing SonyMakernote classes to SonyType1Makernote
    • Added tags to the previously empty SonyType1MakernoteDirectory
    • Added support for Sony Type 6 makernotes
    • Added support for Sigma/Foveon camera makernotes
    • Added support for many more Panasonic makernote tags
    • Considerable additions to Nikon Type 2 makernote handling (covering modern Nikon cameras)
  • Reliability
    • Converted all access to byte[] in ExifReader to be via BufferReader, ensuring proper bounds checking during processing
    • JpegMetadataReader no longer assumes that certain segments always hold one type of metadata, cycling through the segments available and opportunistically detecting segments that can be processed
    • Now stopping IFD processing when an invalid format type is encountered, helping to avoid populating directories with lots of rubbish from corrupt files
    • Can now decode version numbers of form [0 1 0 0] as well as [48 49 48 48]
    • Introduced new checked BufferBoundsException which is thrown by all BufferReader methods, ensuring that calling code properly handles cases when we run out of data
    • Applied @Nullable and @NotNull attributes across entire codebase
  • Unit Tests
    • Significantly improved IPTC unit testing.
    • Added unit tests for Sony Type 1 and Type 6 makernotes
    • Updated all unit tests to jUnit 4
    • AllTests class no longer needed and removed
    • Effort to make unit tests work in non-English locales
  • Bugs
    • Fixed a potential bug in ExifReader around handling of float32/64 values. This may never have been seen as it doesn't seem that these types are ever used in Exif data
    • Fixed a potential exception in Directory.getString(int) when the underlying value is an array of primitives other than int
    • Fixed typo in GpsDirectory which incorrectly confused the TAG_GPS_IMG_DIRECTION_REF and TAG_GPS_IMG_DIRECTION tag names
    • Corrected integer value assigned to tag TAG_GPS_AREA_INFORMATION
    • Added proper decoding of GpsDirectory.TAG_GPS_VERSION_ID
    • Introduced Yuri's fix for the various SOF0-SOFF Jpeg segments
    • Improved Exif directory 'user comment' decoding for various character sets.
    • Avoid OutOfMemoryError if the advertised size of the image thumbnail is larger than the available bytes in the Exif segment
  • Public API changes
    • Metadata and Directory are now both iterable, so they support foreach now
    • Removed checked MetadataException from all description getters
    • Refactored all Reader classes to take their data in the extract method, rather than in their constructors, offering thread safety and allowing reuse
    • Created method Metadata.hasErrors() that reports whether there exists an error in any directory
    • Separated Exif IFD1 (thumbnail) tags out from the IFD0 tags and into the new ExifThumbnailDirectory with ExifThumbnailDescriptor
    • Split ExifDescriptor into ExifIFD0Descriptor and ExifSubIFDDescriptor to mirror actual IFD structure in physical metadata, preventing against tag overwrites due to merging, and making later support for writing metadata easier
    • Added an overload of Directory.getString that accepts a charset
    • Use of generics
      • Replaced several instances of ArrayList and HashMap with their generic counterparts
      • Genericised methods on Metadata for obtaining Directory objects, removing several casts
      • Made TagDescriptor generic
      • Added generic constraint upon Metadata.getDirectory and Metadata.containsDirectory methods and removed cast and check that are subsequently unnecessary
      • Made descriptor constructors take more specific directory types
    • Added overload of Directory.getDate that accepts a TimeZone to be used if the underlying value is a string and must be parsed
    • Renamed ExifDirectory.TAG_COMPRESSION to ExifDirectory.TAG_THUMBNAIL_COMPRESSION
    • Removed some incomplete and unused constants on ExifDirectory
    • Removed dependency upon com.sun.image.codec.jpeg in JpegMetadataReader
    • Created hashCode method for Rational as it overrides equals
    • Removed old deprecated constructors for reader classes
  • Internal API changes
    • Rational now backed by long, not int
    • Considerable simplification of interface MetadataReader and all its implementations
    • Overhauled means of reading different types from byte[]}} across allReaderclasses via use of newBufferReader` class
    • Created methods to add arrays of float/double to a Directory
    • Renamed Metadata.getDirectory as getOrCreateDirectory, and made a new method getDirectory that doesn't lazily create a directory
    • Metadata readers only accept non-null byte[] as a data source
    • Added overload of BufferReader.getString that takes a charset
    • Simplified ExifReader by removing some fields so that state is now mostly maintained on the stack
    • JpegSegmentReader.readSegment() no longer throws JpegProcessingException, simplifying some call sites too
  • Findbugs support
    • Addressed a few more minor Findbugs warnings
    • Disabled Findbugs inspections on XMPCore module
  • Serialisation
    • Directory and Descriptor are no longer serialisable
    • Set serialVersionUID on all serialisable exception types, and Rational
  • Miscellaneous
    • Added Javadoc to SVN for viewing via Google Code
    • Updated source code headers with Apache 2 License banner
    • Excluded Output folder from IntelliJ project
    • ImageMetadataReader.main now has an option to output Wiki format tables to more easily show sample output information on the project's wiki
    • ImageMetadataReader.main now accept multiple file paths
    • Several spelling mistakes corrected
    • Removed commented code
    • Removed compiler warnings
    • Added some more sample images

RC2

Released 27 May 2011

  • Created new Age class for more meaningful representation of recognised people's ages in Panasonic camera photos.
  • Created descriptor methods for additional Panasonic makernote tags (for baby ages and text stamps)
  • Fixed a bug where PanasonicMakernoteDescriptor.getTitleDescription was returning the text associated with TAG_LANDMARK
  • Created PanasonicMakernoteDirectory.getAge method for raw access to the Age object associated with certain tags
  • Added missing hashCode() method to Face class
  • Added missing getters to Face class
  • Fixed logic that checks for the end of a printable string in PanasonicMakernoteDescriptor
  • Fixed annotation issue
  • Made the XMPMeta object instance available on XmpDirectory for general consumption
  • Added support for AdobeJpegDirectory and related classes, which comes from the APPE JPEG segment, when present
  • Additional API documentation
  • Dealt with some incorrect code analysis warnings

RC 3 (released)

Released 18 Nov 2011

  • Fixed a bug where adding an offset and length resulting in integer overflow was incorrectly passing a bounds check
  • Added unit test for IccReader
  • Added exception handling for parsing of numeric types from strings in XmpReader
  • Fixed bug in parsing of JFIF data
  • Added JFIF parsing unit test
  • Removed ISO description check that multiplied ISO values less than 50 by 200
  • Created utility class ExtractAppSegmentBytesToFileUtility for writing specific JPG segments to files, and reading them again into byte[] for convenience in unit testing (and keeping source code file size down)

v2.4.0

20 Nov 14:21
Compare
Choose a tag to compare

Released 14 Dec 2006

  • Added support for TIFF files and several camera RAW formats.
    • Tested on NEF (Nikon), CRW & CR2 (Canon), ARW (Sony)
    • Thanks to Darren Salomons and Peter Wayner for their help with this.
  • New class ImageMetadataReader can be used for all supported file types.
  • Improved Javadoc coverage.
  • A few methods marked deprecated in preparation for future releases.

v2.3.1

20 Nov 14:20
Compare
Choose a tag to compare

Released 25 Feb 2006

  • Fixed copy-and-paste errors in ExifDescriptor. Thanks to Ferret Renaud.

v2.3.0

20 Nov 14:20
Compare
Choose a tag to compare

Released 12 Jan 2006

  • New tags from Exif 2.2 specification (A401-A420).
  • Fixed stack overflow exception in ExifReader for cyclic directory references. Thanks to John Sidney-Woollett for reporting this bug (reported for Fuji FinePix A101 and Canon 20D).
  • Fixed rounding error in the shutter speed description which was giving the wrong value most of the time (for example, 1/32 instead of 1/50). Thanks for Gli Blr and Mark Edwards for pointing out this error.
  • Fix thread safety bug in ExifReader.
  • Fixed OutOfMemoryError seen in certain Canon 20D images. Thanks to Henry Yeung for providing an image to reproduce this error.
  • Support for Windows XP Exif tags (Author, title, comments, etc).
  • Added more documentation, and removed commented/unused code.
  • Enhanced descriptor support for Exif tags.
  • Extract comments in non-ASCII encodings.
  • Improved camera model makernote support:
    • New models:
      • Epson (thanks to David Carlson for pointing me in the right direction with this)
      • Kyocera / Contax (very limited)
      • Minolta (it utilises the Olympus format)
      • Panasonic
      • Pentax / Asahi
    • Improved support for models:
      • Olympus
      • Canon (tested with newer Canon models, including the 20D)
      • Casio (for more modern models)
  • Source distribution file size reduced by using .metadata files, rather than entire sample JPEG files. These .metadata files contain all non-image JPEG segments, making them suitable for unit tests whilst being much smaller on disk.

v2.2.2

20 Nov 14:19
Compare
Choose a tag to compare

Released 22 Nov 2003

  • Fixed a bug where version strings were assumed to be comprised of exactly four parts, and cases were found where a different number existed

v2.2.1

20 Nov 14:19
Compare
Choose a tag to compare

Released 24 Oct 2003

  • Fixed a bug where JpegDirectory had tag names for image width and height around the wrong way. Thanks to Sander Smith for pointing this out.