Releases: drewnoakes/metadata-extractor
Releases · drewnoakes/metadata-extractor
v2.6.2
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
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
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 theGpsDirectory
- 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 asByteArrayReader
- Created a new
RandomAccessFileReader
which allows the processing of files without loading the whole file into memory - Added
PsdMetadataReader
,PsdReader
,PsdHeaderDirectory
andPsdHeaderDescriptor
classes which offer some basic support for PSD files - Changed base class's
MetadataReader.extract
method to take aBufferReader
instead of abyte[]
v2.5.1
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
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 toSonyType1Makernote
- 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[]
inExifReader
to be viaBufferReader
, 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 allBufferReader
methods, ensuring that calling code properly handles cases when we run out of data - Applied
@Nullable
and@NotNull
attributes across entire codebase
- Converted all access to
- 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 theTAG_GPS_IMG_DIRECTION_REF
andTAG_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
- Fixed a potential bug in
- 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
withExifThumbnailDescriptor
- Split
ExifDescriptor
intoExifIFD0Descriptor
andExifSubIFDDescriptor
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
andHashMap
with their generic counterparts - Genericised methods on Metadata for obtaining Directory objects, removing several casts
- Made
TagDescriptor
generic - Added generic constraint upon
Metadata.getDirectory
andMetadata.containsDirectory
methods and removed cast and check that are subsequently unnecessary - Made descriptor constructors take more specific directory types
- Replaced several instances of
- Added overload of
Directory.getDate
that accepts aTimeZone
to be used if the underlying value is a string and must be parsed - Renamed
ExifDirectory.TAG_COMPRESSION
toExifDirectory.TAG_THUMBNAIL_COMPRESSION
- Removed some incomplete and unused constants on
ExifDirectory
- Removed dependency upon
com.sun.image.codec.jpeg
inJpegMetadataReader
- Created hashCode method for
Rational
as it overrides equals - Removed old deprecated constructors for reader classes
- Metadata and Directory are now both iterable, so they support
- 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 all
Readerclasses via use of new
BufferReader` class - Created methods to add arrays of float/double to a
Directory
- Renamed
Metadata.getDirectory
asgetOrCreateDirectory
, and made a new methodgetDirectory
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 throwsJpegProcessingException
, simplifying some call sites too
- Findbugs support
- Addressed a few more minor Findbugs warnings
- Disabled Findbugs inspections on
XMPCore
module
- Serialisation
Directory
andDescriptor
are no longer serialisable- Set
serialVersionUID
on all serialisable exception types, andRational
- 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 wikiImageMetadataReader.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 withTAG_LANDMARK
- Created
PanasonicMakernoteDirectory.getAge
method for raw access to theAge
object associated with certain tags - Added missing
hashCode()
method toFace
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 onXmpDirectory
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 intobyte[]
for convenience in unit testing (and keeping source code file size down)
v2.4.0
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
Released 25 Feb 2006
- Fixed copy-and-paste errors in
ExifDescriptor
. Thanks to Ferret Renaud.
v2.3.0
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)
- New 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
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
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.