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 critical bug (crash, data/metadata loss or security hazard). * Other modification (e.g. architectural improvement). Version 0.7.1 19-mar-2012 ------------- !! Fixed a regression in the reduction of palette-encoded grayscale images. This regression was introduced in version 0.7. (Thanks to Adam Ciarcinski for the fix.) Version 0.7 29-feb-2012 ----------- * Upgraded libpng to version 1.4.9. * Upgraded zlib to version 1.2.6-optipng. !! Resolved a rarely-occurring out-of-bounds memory access error in Z_RLE, by upgrading zlib. (Thanks to Christopher Wichura for the report, and thanks to Mark Adler for fixing zlib.) + Added the popularly-requested option -strip. The only suboption currently supported is "-strip all". + Added the option -clobber. (Thanks in part to Maciej Pilichowski for the contribution.) + Added the option -backup, as an alias of -keep. + Added the option -silent, as an alias of -quiet. - Deprecated the option -log. * Changed the activity display output from STDOUT to STDERR. + Allowed the option -preserve to save high-resolution timestamps on Unix, if the POSIX-1.2008 API is available. This feature was previously available on Windows only. ! Fixed a minor precision error in the display of file size percents. ! Fixed a memory leak that occurred when reading broken GIF images. ! Fixed various build issues. (Thanks to Sebastian Pipping and Ville Skytta for the fixes.) * Resolved all remaining compatibility issues with libpng-1.5. (Thanks in part to Adam Ciarcinski for the contribution.) * Added build support for clang. * Reorganized the source directory structure. Version 0.6.5 24-jan-2011 ------------- * Upgraded libpng to version 1.4.5-optipng [private] * Upgraded zlib to version 1.2.5-optipng [private] !! Fixed the I/O states (in libpng 1.4.5); they caused incorrect file reads in some rare cases. (Thanks to [M*A*S*H] and Dmitry Marakasov for the report.) !! Fixed processing of PNG files with chunks of size 0. (Thanks to Matthew Fearnley for the report.) ! Fixed a display error in the TIFF import. (Thanks to Piotr Bandurski for the fix.) + Improved checking of the arguments of -f, -zc, -zm and -zs. - Removed quirks from the rangeset option argument syntax. ! Fixed a build issue under the system-supplied libpng-1.4. (Thanks to Petr Gajdos for the fix.) * Resolved forward-compatibility issues regarding libpng-1.5; however, the system-supplied libpng-1.5 is not yet supported. * Added various enhancements to the configure+make build system. (Thanks in part to Elias Pipping and Dmitri Zubko.) 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 occurred 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 occurrence 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 occurred 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.1 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.