
OptiPNG - Revision history
==========================

Legend
------
++ Added or improved performance-related feature
   (might improve compression ratio or processing speed).
 + Added or improved feature.
 - Removed feature.
 ! Fixed bug.
!! Fixed dangerous bug
   (data/metadata loss or serious security hazard).
 * Other modification (e.g. architectural improvement).


Version 0.6.4   14-mar-2010
-------------
 + Upgraded libpng to version 1.4.1-optipng [private]
 + Upgraded zlib to version 1.2.4-optipng [private]
 + Added the option -nx.
 * Clarified the behavior of -nz and the relation between -nz and -o0.
 + Added a filesystem check (resolving normalized paths, symlinks, etc.)
   to better detect when the output overwrites the input.
 + Enabled automatic wildcard expansion (i.e. globbing) on Win64.
 ! Fixed a Unicode build issue on Windows.
   (Thanks to Fabien Barbier for the fix.)


Version 0.6.3   18-may-2009
-------------
 + Upgraded libpng to version 1.2.36-optipng [private]
!! Fixed a use-after-free error in the GIF reader.
   (Thanks to Roy Tam for the report, and to Bryan McQuade for the fix.)
 ! Flushed the output log to display the current trial in real time.
   This only worked on Windows in the previous version.
   (Thanks to Vincent Lefevre for the fix.)
 ! Fixed an error in reporting unrecognized file formats.
   (Thanks to [LaughingMan] for the report.)
 - Removed the requirement to "fix" TIFF files that contain unrecognized
   metadata.  (Thanks to Piotr Bandurski for the suggestion.)
 * Simplified the option abbreviation rules.  Option names can now be
   abbreviated to their shortest unique prefix, as in X11 applications.


Version 0.6.2    9-nov-2008
-------------
 + Upgraded libpng to version 1.2.33-optipng [private]
++ Put back a speed optimization, accidentally removed in version 0.6,
   allowing singleton trials (-o1) to be bypassed in certain conditions.
!! Fixed an array overflow in the BMP reader.
!! Fixed the loss of private chunks under the -snip option.
 + Produced a more concise on-screen output in the non-verbose mode.
   (Thanks to Vincent Lefevre for the contribution.)
 * Added a programming interface to the optimization engine, in order
   to facilitate the development of PNG-optimizing GUI apps and plugins.


Version 0.6.1   20-jul-2008
-------------
 * Upgraded cexcept to version 2.0.1.
 + Added a configure script, to be used instead of unix-secure.mak.
 ! Fixed a build issue that occured when using libpng from the system.
   (Thanks to Nelson A. de Oliveira for the report.)
 ! Fixed processing when image reduction yields an output larger than
   the original.  (Thanks to Michael Krishtopa for the report.)
 ! Fixed behavior of -preserve.
   (Thanks to Bill Koch for the report.)
 - Removed displaying of partial progress when abandoning IDATs under
   the -v option.  The percentages displayed were not very accurate.


Version 0.6     15-jun-2008
-----------
 + Upgraded libpng to version 1.2.29-optipng [private]
++ Implemented grayscale(alpha)-to-palette reductions.
++ Improved conversion of bKGD info during RGB-to-palette reductions.
   (Thanks to Matthew Fearnley for the contribution.)
!! Fixed conversion of bKGD and tRNS during 16-to-8-bit reductions.
   (Thanks to Matthew Fearnley for the report.)
 + Added support for compressed BMP (incl. PNG-compressed BMP, you bet!)
 + Improved the speed of reading raw PNM files.
 + Recognized PNG digital signatures (dSIG) and disabled optimization
   in their presence, to preserve their integrity.
 + Allowed the user to enforce the optimization of dSIG'ed files.
 + Recognized APNG animation files and disabled reductions to preserve
   their integrity.
 + Added the -snip option, to allow the user to "snip" one image out of
   a multi-image file, such as animated GIF, multi-page TIFF, or APNG.
   (Thanks to [LaughingMan] for the suggestion.)
 + Improved recovery of PNG files with incomplete IDAT.
!! Fixed a crash triggered by the use of -log on some platforms.
   (Thanks to Stefan Bruns for the fix.)
 ! Fixed behavior of -out and -dir when the input is already optimized.
   (Thanks to Christian Davideck for the report.)
 * Provided more detailed image information at the start of processing.
 * Provided a more detailed summary at the end of processing, under the
   presence of the -v option and/or the occurence of exceptional events.


Version 0.5.5   28-jan-2007
-------------
 + Upgraded libpng to version 1.2.15-optipng [private]
++ Used a previously-missed RGB-to-palette reduction opportunity
   for images containing 256 distinct colors.
   (Thanks to Joachim Kluge for the report.)
!! Fixed conversion of bKGD info during RGB-to-palette reductions.
   (Thanks to Matthew Fearnley for the report.)
 ! Fixed pre-computation of iterations.
   (Thanks to Matthew Fearnley for the report.)
 ! Eliminated a false alarm when processing RGB images with tRNS
   in Unix-secure mode.  (Thanks to Till Maas for the report, and
   thanks to Nelson A. de Oliveira for the fix.)
 ! Fixed behavior of -out and -dir when changing interlacing.
   (Thanks to Martin Packman for the report.)
 ! Fixed the behavior of "-dir [DRIVE]:" on Windows.


Version 0.5.4   11-aug-2006
-------------
 + Added user options -out and -dir, to specify the name of
   the output file or directory.
   (Thanks to Alexander Lucas for the suggestion.)
 * Added support for builds based on the system-supplied libpng.
   (Thanks to Nelson A. de Oliveira for the valuable help.)


Version 0.5.3   23-jul-2006
-------------
 + Upgraded libpng to version 1.2.12-optipng [private]
 + Implemented basic support for TIFF (grayscale, RGB and RGBA,
   uncompressed).
++ Avoided the redundant trial when the search space is singular
   (e.g. when running "optipng -o1 example.tif").
 + Prevented accidental file corruption when using option "-log".
 ! Fixed (again) a small typo in the online help.


Version 0.5.2    7-may-2006
-------------
 + Improved handling of inexact PNM-to-PNG conversions.
 ! Fixed a typo that was breaking the build on some Unix platforms.
   (Thanks to Aaron Reitz for the report.)


Version 0.5.1   30-apr-2006
-------------
++ Implemented bit depth reduction for palette images.
 + Upgraded libpng to version 1.2.10-optipng [private]
 + Improved the BMP support.
 + Added a Unix man page.
   (Thanks to Nelson A. de Oliveira for the contribution.)
 + Allowed abbreviation of command-line options.
 + Changed user option -log to accept a file name as an argument.
 * Changed user option -no to -simulate.
 ! Fixed an error in handling .bak files on Unix.
   (Thanks to Adam Szojda and Nelson A. de Oliveira for the report.)
 ! Fixed a small typo in the help screen.
   (Thanks to A. Costa and Nelson A. de Oliveira for the report.)


Version 0.5     14-jan-2006
-----------
++ Added pngxtern, a libpng add-on for external image format
   support: BMP (uncompressed), GIF, PNM.
   (This was incorporated from OptiPNG-Plus.)
++ Implemented RGB(A)-to-palette reductions.
 + Upgraded zlib to version 1.2.3-optipng [private]
 + Upgraded libpng to version 1.2.8-optipng [private]
 + If trials are ended prematurely, detailed progression is only
   reported under the user option -v.
 - Removed reporting of some IDAT sizes that exceeded the optimum.
   (This was NOT a bug, but a "feature" that confused some users.)
 ! Fixed an RGB-to-gray reduction problem that occured under some
   specific background colors.
 * Added support for builds based on the system-supplied zlib.
   (Thanks to Nelson A. de Oliveira for the suggestion.)
 * Modified LICENSE.  It is now a verbatim spell of the zlib license.


Version 0.4.8   10-may-2005
-------------
 + Upgraded libpng to version 1.0.18-optipng [private]
!! Fixed a palette-to-gray reduction problem that occurred when an
   RGB triple had both an alpha below max, and an alpha equal to max.
   (Thanks to Nicolas Le Gland for the report.)
 + Packed the Windows executable using UPX.
   (Thanks to [Warriant] for the suggestion.)


Version 0.4.7   30-oct-2004
-------------
!! Fixed a palette-to-gray reduction problem that occurred when
   having more than one alpha value per RGB triple.
   (Thanks to Larry Hastings for the report.)
 ! Fixed the progress display, when processing very large images.
 + Displayed the image info at the beginning of processing.
++ Reduced the IDAT buffer size, allowing abandoned trials to
   terminate earlier in some circumstances.
 + Implemented error recovery, when PLTE is too small, and/or
   tRNS is too large.


Version 0.4.6   25-oct-2004
-------------
 + Upgraded zlib to version 1.2.2-optipng [private]
 + Upgraded libpng to version 1.0.17-optipng [private]
   This provides safe handling of some ill-formed PNG images.
 + Rewrote makefiles.
 + Added project workspace to build under Visual C++ 6.0,
   integrated with memory leak detection.
++ Implemented a premature termination of trials, in the moment
   when IDAT grows beyond the smallest size previously achieved.
   (Thanks to Larry Hastings for the idea.)
 + Changed the order of trials, to perform the trials that are
   more likely to yield a smaller IDAT, at the beginning.
 + Added user option -full to avoid the premature termination of
   trials; useful for debugging.


Version 0.4.5   31-may-2004
-------------
 + Upgraded zlib to version 1.2.1.f-cos2 [private]
 + Upgraded libpng to version 1.0.15-cos2 [private]
 * Changed user option -nx to -nz.
 + Added user option to preserve file attributes (file mode,
   time stamp, etc.) when applicable.
   (Thanks to Nehal Mistry for the suggestion.)
 ! Fixed an incorrect initialization of zlib window bits.
 ! Displayed an error message when the search space was invalid.
!! Fixed a palette reduction problem for bit depths below 8.
 ! Eliminated memory leaks.
   (Thanks to Niels de Koning for the help.)


Version 0.4.4   20-nov-2003
-------------
 + Upgraded zlib to version 1.2.1
++ Added support for the Z_RLE strategy.


Version 0.4.3   12-aug-2003
-------------
 ! Fixed a reduction problem that caused an assertion failure.
   (Thanks to Dimitri Papadopoulos for the report.)


Version 0.4.2   30-jun-2003
-------------
++ Enhanced the support for palette size reductions:
   trailing sterile palette entries are removed even when
   the bit depth is below 8.
 ! Enforced recompression when the new IDAT has the same size,
   but other chunks have been reduced.
 + Displayed the IDAT size difference as a percentage.
   (Thanks to Nehal Mistry for the suggestion.)


Version 0.4.1   19-may-2003
-------------
 ! Fixed the removal of trailing sterile palette entries.


Version 0.4     12-may-2003
-----------
++ Added support for palette-to-gray reductions.
++ Added partial support for palette size reductions.
 ! Fixed the reporting of invalid command-line options.
 ! Eliminated a spurious warning when the zlib window size
   is set to 256.


Version 0.3.2   11-mar-2003
-------------
 + Added support for updating sBIT during reductions.
 ! Fixed the reduction of the alpha channel.


Version 0.3.1   25-feb-2003
-------------
 ! Fixed the encoding of interlaced images when they become
   larger than the input.
   (Thanks to James H. Cloos, Jr. for the report.)
 + Added the HISTORY document (this file).


Version 0.3     24-feb-2003
-----------
This is the first public release of OptiPNG.
++ Added support for iterating through zlib memory levels.
++ Added support for collapsing IDAT, avoiding calls to
   png_set_compression_buffer_size().
   This reduces the memory requirements.
++ Added support for lossless reduction of the image type:
   RGB[A] -> G[A], RGBA -> RGB, GA -> G
 + Added many user options.
 + Added documentation.


Version 0.2     27-dec-2001
-----------
 + Added support for optimization level presets.
 + Added user option for changing the interlacing.


Version 0.1     17-dec-2001
-----------
 + Added support for chunk I/O status annotation.
   This improves the speed of OptiPNG significantly.
 * Structured exception handling is provided by cexcept.


Version 0.0     10-dec-2001
-----------
This is the very first version of OptiPNG.
It compresses IDAT repeatedly, iterating through zlib compression
and strategy levels, and PNG filters.

