blob: 4022574f18d4c0511cd3cc71765eab8b57e678e8 [file] [log] [blame]
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.4 21-oct-2012
-------------
!! Fixed the previous fix, which failed to fix the option -fix.
(Thanks to Gynvael Coldwind and Mateusz Jurczyk for the report.)
Version 0.7.3 16-sep-2012
-------------
!! Fixed a use-after-free vulnerability in the palette reduction code.
This vulnerability was accidentally introduced in version 0.7.
Version 0.7.2 24-aug-2012
-------------
* Upgraded libpng to version 1.4.12.
* Upgraded zlib to version 1.2.7-optipng.
! Fixed the display of huge (4GB+) file/IDAT sizes on 32-bit platforms.
! Issued a proper error message if the output IDAT can't fit in 2GB.
Acknowledged this limitation in the user manual.
(Thanks to John Sauter for the report.)
! Fixed the output file cleanup that should occur after a write error.
* Added the option -debug and various undocumented debug features.
* Moved the PNG reduction module (opngreduc) to a separate sub-project.
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.
* Upgraded zlib to version 1.2.5-optipng.
!! 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.
* Upgraded zlib to version 1.2.4-optipng.
+ 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.
!! 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.
++ 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.
++ 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.
++ 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.
+ 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.
+ 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.
* Upgraded libpng to version 1.2.8-optipng.
+ 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.
!! 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.
* Upgraded libpng to version 1.0.17-optipng.
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.
* Upgraded libpng to version 1.0.15-cos2.
* 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.