v2.3.1 - 25 Feb 2006
-------------------------------
  - Fixed copy-and-paste errors in ExifDescriptor.java.  Thanks to Ferret Renaud.

v2.3.0 - 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 filesize 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 - 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 - 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

v2.2 - 18 Oct 2003
-------------------------------

 - Added support for extraction of Jpeg image information (from the SOF0 segment)
   Thanks to Darrell Silver for commencing the code for this extension
 - Added support for reading Jpeg comments
 - Additional Nikon camera makernote support for D1/D100 family models
   Thanks to Daniel Waeber for providing sample images and to Fabrizio Giudici for
   publishing his work in decoding this makernote data
 - Added convenient writing of thumbnails to files from ExifDirectory
 - Fixed a bug in date format strings, whereby times in the AM / PM were indistinguishable
   Thanks to Bill Boland for being the first person to point this out (this was a popular one!)
 - Fixed bug for multi-component tag values of certain types
   Thanks to Derek Wegner for identifying the bug and providing a solution
 - More unit tests (consequently, the source-code download is much larger)
 - First version with an Ant build script

v2.1 - 12 Jan 2003
-------------------------------

  - Extract methods no longer throw exceptions, with error information stored
    in Metadata instances, using hasErrors() and getErrors()
  - Metadata and dependant classes now serializable for network transmission,
    and persistance in files & databases
  - Support for extracting metadata from InputStreams, such as network connections
  - Replaced code that depended upon JDK 1.4

v2.0 - 10 Dec 2002
-------------------------------

  Enormous changes to the class and package structure in this release prohibit a
  class-by-class breakdown of changes.  The focus is no longer on Exif metadata
  alone, but now on general metadata extraction from multiple media types.

  Changes support:
    - easier future extensibility
    - Iptc metadata extraction
    - multiple directories of tags
    - descriptor class for interpreting values in a given directory
    - multiple media and metadata types
    - enhanced handling of exif makernote values
    - many more unit tests
    - numerous enhancements
    - minor bug fixes

  Simpler extensibility changes the focus from exif extraction alone and opens
  the scope to general metadata extraction.  Future development will introduce
  new media and metadata support with little or no impact to existing classes.

v1.2 - 6 Nov 2002
-------------------------------

  ExifExtractor.java
    - Proper traversing of Exif file structure and complete refactor & tidy of
      the codebase (a few unnoticed bugs removed)
    - Reads makernote data for 6 families of camera (5 makes)
    - Tags now stored in directories... use the IFD_* constants to refer to the
      image file directory you require (Exif, Interop, GPS and Makernote*) --
      this avoids collisions where two tags share the same code
    - Correct extraction of multi-component values
    - No longer decodes image to extract Exif data -- this is much faster
    - Takes componentCount of unknown tags into account
    - Now understands GPS tags (thanks to Colin Briton for his help with this)
    - Returns null when no Exif data present, instead of throwing an exception
    - Some other bug fixes, pointed out by users around the world.  Thanks!

  ExifLoader
    - Removed (unnecessary)

  ImageInfo.java
    - Stored IFD directories in separate tag-spaces
    - iterator() now returns an Iterator over a list of TagValue objects
    - More get*Description() methods to detail GPS tags, among others

  TagValue.java
    - New class to encapsualte information about a particular tag

  Rational.java
    - Improved toSimpleString() to factor more complex rational numbers into
      a simpler form
        i.e.
          10/15 -> 2/3
    - toSimpleString() now accepts a boolean flag, 'allowDecimals' which will
      display the rational number in decimal form if it fits within 5 digits
        i.e.
          3/4 -> 0.75 when allowDecimal == true

  JpegSegmentReader
    - New class to extract APP1 segment (and others) from a Jpeg file -- this
      avoids decoding images just to get metadata

  tests\*.java
    - First collection of basic unit tests, to compile against JUnit
    - Doesn't yet cover all classes

  Website
    - A collection of JPEGs from various digital camera models, collected on
      the web and contributed by many users of ExifExtractor
    - Updated documentation


v1.1.1
-------------------------------

  Rational.java
    - Added toSimpleString() method, which returns a simplified and hopefully
      more readable version of the Rational
        i.e.
          2/10 -> 1/5
          10/2 -> 5

  ExifExtractor.java
    - Removed unnecessary casting operations
    - Added a few more comments
    - Removed redundant and commented code (I'm using a CVS system now)

  ExifLoader.java
    - Added a much-needed close() call to a created input stream, allowing
      continued use of the File object passed to ExifLoader.getImageInfo(File)

  ImageInfo.java
    - Make use of new Rational method toSimpleString() for more elegant output -
      Use of DecimalFormatter to tidy output in selected get***Description() methods

v1.1.0 - 28 Aug 2002
-------------------------------

  - Descriptive tag values, including units and text for enumerations
  - Decoupling from JDK 1.4-specific libraries (tested with JDK 1.3)
  - More complete list of tags, both as constants for direct lookup, and via the
    static lookup method

v1.0
-------------------------------

  - Initial release