
Apache Commons Imaging
Version 1.0
Release Notes

INTRODUCTION

Apache Commons Imaging is a pure-Java image library for reading and writing
a variety of image formats.

For complete information on Commons Imaging, including sample code,
instructions on how to submit bug reports, patches, or suggestions for
improvement, see the Apache Commons Net website:

http://commons.apache.org/imaging/

Please note that the project was previously known as Apache Sanselan,
and has been renamed to Apache Commons Imaging. As part of this rename:

 * the package changed to
     org.apache.commons.imaging
   from
     org.apache.sanselan

 * the main class is now
     org.apache.commons.imaging.Imaging
   and not
     org.apache.sanselan.Sanselan

 * the Maven coordinates are now:
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-imaging</artifactId>
     <name>Commons Imaging</name>
   instead of the old:
     <groupId>org.apache.sanselan</groupId>
     <artifactId>sanselan</artifactId>
     <name>Apache Sanselan</name>

 * the website is
     http://commons.apache.org/imaging
   and not
     http://commons.apache.org/sanselan

 * etc.

VERSION HISTORY

Release 1.0
------------
TBA

Changes in this version include:

New features:
o IMAGING-75:  Added accessor methods for a number of ImageInfo properties. 
o IMAGING-71:  Applied patch contributed by Nicolas Richeton, adding getEXIFThumbnailSize() and getEXIFThumbnailData() methods to JpegImageMetadata. Thanks to Nicolas Richeton. 
o IMAGING-56:  Add support for the ICNS icon format. Thanks to damjan. 
o IMAGING-58:  Add support for PCX, DCX, WBMP, XBM and XPM images. 
o IMAGING-64:  Add support for TIFF files with compression=2, (CCITT Group 3 1-Dimensional Modified Huffman run length encoding). 
o IMAGING-77:  Add a type-safe high-level API for writing TIFF fields. 
o IMAGING-51:  Add TagInfoXpText for fields like XPTITLE, and encode/decode it using UTF-16LE like Windows does. 
o IMAGING-60:  Added support for reading the RGBE / Radiance HDR image format. Thanks to proyal. 
o IMAGING-68:  Add a field to IptcRecord that contains its raw bytes, and a getter for this value. 
o IMAGING-73:  Provide a way to write EXIF data into files using Sanselan.writeImage(). 
o IMAGING-47:  Run a Findbugs analysis on "mvn site". Also audit and fix resource leaks. Thanks to adrian2k7. 
o IMAGING-65:  Provide a way to write the pixel density (DPI) into an image. 
o IMAGING-61:  Include a test utility for timing and memory in project example classes. Thanks to gwlucas. 
o IMAGING-81:  Add more Javadoc to main package. Thanks to gwlucas. 
o IMAGING-89:  Detect the YCCK color space/type in JPEG files' APP14 segment. 
o IMAGING-94:  Add ability to load partial TIFF images Thanks to gwlucas. 

Fixed Bugs:
o IMAGING_121:  Null Pointer exception while extracting metadata for CR2 image. Thanks to Piyush Kapoor. 
o IMAGING-115:  DhtSegment class contains mutable public arrays. 
o IMAGING-117:  SofnSegment.components - public mutable array. 
o IMAGING-116:  GenericSegment.bytes - public mutable array. 
o IMAGING-118:  interface RgbeConstants contains mutable array. 
o IMAGING-114:  ComSegment.comment is a public final byte array. 
o IMAGING-109:  Several files contain non-UTF8 characters. 
o IMAGING-113:  Cannot read multipage tiff. 
o IMAGING-108:  JPEG EOI marker could not be found at expected location. 
o IMAGING-101:  GIF dimensions transposed. Thanks to Colm O hEigeartaigh. 
o IMAGING-23:  JpegXMPWriter throws NullPointerException. 
o IMAGING-74:  Fixed a couple of platform-dependent paths in the tests.
        Constantized the magic numbers used when guessing formats.  
        Added a test for the format guessing. 
o IMAGING-2:  SanselanGuessFormatTest and SanselanTestConstants use Java 1.5 method String.replace(CharSequence, CharSequence). 
o IMAGING-80:  Sanselan tests fail on Windows. 
o IMAGING-18:  Fix for "JpegImageMetadata getEXIFThumbnail only works on Jpeg thumbnails stored as Tiff images" issue.
        Jpeg thumbnails are read using ImageIO. Thanks to James E-J. 
o IMAGING-48:  JpegImageMetadata getEXIFThumbnail may raise a null pointer exception. 
o IMAGING-52:  Implement dumpImageFile for ICO files and fix a typo. Thanks to damjan. 
o IMAGING-12:  Tiff (exif) tags of type double written in wrong byte order. Thanks to gwlucas. 
o IMAGING-30:  The isTransparent flag is not set on transparent PNGs. Thanks to clement.escoffier. 
o IMAGING-11:  Ignore TIFF entries that have invalid offsets and/or lengths when we are not in strict mode. 
o IMAGING-78:  readDirectory method in TiffReader doesn't gracefully handle exceptions that can be thrown from ByteSource implementations. 
o IMAGING-24:  Search all tags instead of just EXIF tags when parsing TIFF metadata tags, and try to match on directory type as well. 
o IMAGING-21:  Don't allow very large TIFF lengths to be interpreted as negative because they have the highest order bit set. 
o IMAGING-50:  Make JPEG parsing highly resilient: skip all bytes after the end of a segment until the next segment (0xFF followed by non-0xFF). 
o IMAGING-16:  Fix reading ASCII tags in TIFF files. 
o IMAGING-3:  Ignore string differences in our tests when 7 bit unclean TIFF string are copied. 
o IMAGING-41:  Don't redefine BYTE_ORDER_BIG_ENDIAN and BYTE_ORDER_LITTLE_ENDIAN in UnicodeMetricsUTF16. 
o IMAGING-35:  Fixed issue "FieldTypeASCII does not conform to the EXIF specification," identified by Libor Nenadál. 
o IMAGING-31:  Fixed a bug in which gifs have incorrect size information in the the Logical Screen Descriptor.
        This appears to be a bug in how Microsoft Office writes gifs. The Image Descriptor has the correct value. 
o IMAGING-13:  Added checks in ByteSource's getBlock() methods for invalid params. 
o IMAGING-46:  Fixed a possible NPE in Sanselan.getICCProfile pointed out by Jon Weygandt. 
o IMAGING-76:  Improve ICO file support. Thanks to damjan. 
o IMAGING-49:  Preserve the byte range occupied by the Maker Notes, so rewriting it doesn't corrupt it. 
o IMAGING-29:  Read in the full IPTC block before trying to ignore it, so we don't lose our position in the stream. Thanks to alexvigdor. 
o IMAGING-45:  Fix the GIF BitsPerPixel formula in GifImageParser's getImageInfo(). Thanks to pkapoor. 
o IMAGING-39:  Fix various problems with reading and writing EXIF tags. 
o IMAGING-22:  Eliminate or hide public mutable final arrays in the API. 
o IMAGING-43:  If the TIFF rows per strip is not present, assume it is the image length. Thanks to pkapoor. 
o IMAGING-17:  Make BitInputStream sensitive to byte order. Allows 48 BPP TIFF files to load. Thanks to pkapoor. 
o IMAGING-38:  Fix the PhysicalWidthDpi calculation for JPEG images. Thanks to tjoris. 
o IMAGING-19:  Fix reading DPI for TIFF files. Thanks to vvd. 
o IMAGING-44:  Fix reading DPI for PNG files. Thanks to vvd. 
o IMAGING-40:  Add the Software TIFF tag, and get the byte order after reading the first TIFF directory. Thanks to pkapoor. 
o IMAGING-6:  Correct the expected size of the decompressed TIFF image data, and improve sample depth scaling for PNG images. 
o IMAGING-15:  Stop JpegImageMetadata from throwing NPE if the exif field is null. Thanks to pkapoor. 
o IMAGING-67:  Speed up reading paletted TIFF files. Thanks to gwlucas. 
o IMAGING-8:  Allow TIFF fields to change size during encoding. Fix a broken test that assumes they never do. 
o IMAGING-36:  Fix sample usage links on the website. 
o IMAGING-70:  Reduce memory usage when reading TIFF files. Thanks to gwlucas. 
o IMAGING-33:  Fixed the differencing predictor for tiled TIFF images. 
o IMAGING-5:  Update website, fix some broken links and remove old code. 
o IMAGING-69:  Add a streamlined TIFF reader that reduces load time by a factor of 5. Thanks to gwlucas. 
o IMAGING-82:  Fix BMP width and height DPI. Thanks to pkapoor. 
o IMAGING-86:  Fix the lengths for DateTimeOriginal and DateTimeDigitized TIFF/EXIF tags. 
o IMAGING-88:  Method lowerBound in org.apache.commons.imaging.common.itu_t4.T4AndT6Compression has a division error. Thanks to craigkelly. 
o IMAGING-92:  Issue trying to update GPS metadata info in a JPG. Thanks to hmarmy. 
o IMAGING-93:  Tiled TIFF images do not correctly load partial tiles. Thanks to gwlucas. 
o IMAGING-90:  Allow non-1 TIFF field lengths when parsing offset fields in non-strict mode. 
o IMAGING-99:  java.io.IOException: Could not read block Thanks to st.h. 

Changes:
o IMAGING-91:  ByteSourceInputStream.streamLength could be a long. 
o IMAGING-95:  Some tiff processing takes very long. Thanks to amitgupt. 

Minimum Java version: 1.5
Compatibility with 0.97:
  Binary compatible: No.
  Source compatible: No.
  Semantic compatible: No.


Release 0.97
------------
	
 * Rewrote the info.txt files for many images in the sample image library to clarify contribution to project.
 * Removed the images from the www.wpclipart.com Public Domain library.
 * Improved the examples illustrating how to change EXIF metadata.
 * Applied a patch from Niall Pemberton around jdk1.5 compatibility:
	"""
	Sanselan claims JDK 1.4 compatibility, but a JDK 1.5 method (Class's getSimpleName() [1]) has been used in JpegRewriter
	"""
 * Applied a "Build Improvements" patch from Niall Pemberton:
	"""
	I took a look at the propsed 0.96 relelase and have some suggestions to improve the build:
	 * Add standard manifest entries to jar
	 * Lock down version numbers for maven compiler, surefire and javadoc plugins
	 * generate sources jar for the release
	 * include the RELEASE-NOTES in the binary distribution
	 * include NOTICE/LICENSE files in the javadoc jar
	"""

Release 0.96
------------

 * Updated KEYS file.
 * Added more unit tests around BMP.
 * Added more images to the test image suite.
 * Fixed a bug where errors were being wrongly logged to System.out.
 * Moved the example code into the test source directory, to comply with Maven's standard project layout.
 * Added a couple of images to the sample image library that demonstrate a couple variations on Photoshop/IPTC data.  
 * Fixed a small bug in the IPTC constants introduced while cleaning up the constants.
 * Started shift towards moving field-level parsing into BinaryInputStream and BinaryOutputStream.
 * Fixed a png unit test that used a piece of Java 1.6 syntax.
 * Added unit tests around the new IPTC functionality.
 * Added IPTC remove/update/insert functionality.
 * Rewrote the IPTC parsing support.  
 * Added improved support for reading and writing iTXt, tEXt, zTXt Png chunks.
 	Added a unit test that demonstrates the feature.
 * Found a new regression wherein DeflaterOutputStream needs to be closed.
 * Added the .tar.bz2 distributions back into the maven assembly descriptors.
 * Moved the example/sample code to a new top-level source folder, "example."
 * Replaced dependency on java.util.zip.DeflaterOutputStream, which is only available in Java 1.6.
 * Added a unit test around reading and writing images in every format.
 * We now sort some (but not all) GIF color tables.
 * Applied the BMP "buffer flushing" bug to the PBM reading and writing code.
 * Fixed a regression around flushing the bit buffer when writing BMPs with very small palettes.
 * Removed assumption about DataBuffer type when reading BMPs.
 * When writing a GIF, we now always include a Graphic Control Extension block, even if its not necessary.
 * We are more defensive about missing GCEs.
 * Lastly, we now set a minimum bound on initial code sizes for LZW-compressed Gif image data.
 * Found a regression in writing TIFFs around strip offsets being properly updated.  Not a LZW issue after all.
	Added a few unit tests around this issue.	
	see: https://issues.apache.org/jira/browse/SANSELAN-6
 * Added ability to remove and update XMP XML in existing JPEG files.
 * Added ability to embed XMP XML when writing the following formats: GIF, PNG, TIFF.
 * Improved handling of tEXt and zTXt PNG text blocks.
 * Added XMP XML extraction for the following formats: GIF (untested), JPEG, TIFF, PNG, PSD.
 * Added RELEASE_NOTES file (this file).
 * Added Apache license header to bin.xml and src.xml Maven assembly descriptors.
 * Added Javadocs to the binary distribution
 

Release 0.94
------------

First Apache release of Sanselan

Fixed bugs:
-----------
 * Can't convert PNG image to GIF image
    The PNG reader wasn't handling the 16-bit mode 4 PNGs properly. 
    The PNG reader wasn't gamma-correcting non-palette values properly in PNGs.
	see: https://issues.apache.org/jira/browse/SANSELAN-5

