Skip to content

v2.5.0

Compare
Choose a tag to compare
@drewnoakes drewnoakes released this 20 Nov 14:22

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)