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.