OptiPNG修订历史记录 #
==========================
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.8 2023-nov-03 #
- Upgraded libpng to version 1.6.40.
- Upgraded zlib to version 1.3-optipng.
- Upgraded cexcept to version 2.0.2-optipng. !! Fixed a global-buffer-overflow vulnerability in the GIF reader. [Reported by Zeng Yunxiang; fixed by Thomas Hurst] ! Fixed a stack-print-after-scope defect in the error handler. ! Fixed an assertion failure in the image reduction module. ! Fixed the command-line wildargs expansion in the Windows port.
- Raised the minimum required libpng version from 1.2.9 to 1.6.35.
- Raised the minimum required zlib version from 1.2.1 to 1.2.8.
- Refactored the structured exception handling.
Version 0.7.7 2017-dec-27 #
- Upgraded libpng to version 1.6.34.
- Upgraded zlib to version 1.2.11-optipng.
- Upgraded minitiff to version 0.2. !! Fixed a buffer overflow vulnerability in the GIF decoder. [Reported by Joonun Jang] !! Fixed an integer overflow vulnerability in the TIFF decoder. [Reported by Jaeseung Choi] ! Fixed the build on macOS High Sierra. [Reported by various users] [Fixed by Yuen Ho Wong and Friedrich Preuss] ! Fixed the build on DJGPP.
- Disallowed out-of-bounds values in rangeset options.
Version 0.7.6 2016-apr-03 [Released by Ramona C. Truta] #
- Upgraded libpng to version 1.6.21. ! Fixed an assertion failure in the image reduction code. [Fixed by upgrading libpng] !! Fixed various security-sensitive defects in the BMP decoder. [Reported by Henri Salo and Hans Jerry Illikainen] [Fixed by Ramona C. Truta] ! Fixed a benign uninitialized memory read in the GIF decoder. [Reported by Gustavo Grieco] ! Fixed a build failure occurring under the Estonian (et_EE) locale. [Reported by Sebastian Pipping] [Fixed by Priit Laes] ! Fixed a build failure occurring on Mac OS X, FreeBSD, and possibly other systems that lack POSIX-compliant high-resolution timestamps. [Reported by Ryan Schmidt and Dmitry Egorov] [Contributed by Sebastian Pipping] ! Fixed a typo causing build failures in 32-bit ANSI C compilation. [Reported by various users]
Version 0.7.5 2014-mar-24 #
- Upgraded libpng to version 1.6.10-optipng.
- Upgraded zlib to version 1.2.8-optipng. ! Fixed various build issues with libpng-1.5 and libpng-1.6. [Fixed by Oliver Schneider]
- Allowed the handling of huge image files (> millions of pixels per row or column) to be independent of the libpng version.
- Allowed the option -preserve to save the file ownership (UID/GID) on Unix. [Requested by Otto Kekäläinen] ! Fixed a build issue with Clang.
- Added various enhancements to the configure script.
Version 0.7.4 2012-oct-21 #
!! Fixed the previous fix, which failed to fix the option -fix. [Reported by Gynvael Coldwind and Mateusz Jurczyk]
Version 0.7.3 2012-sep-16 #
!! Fixed a use-after-free vulnerability in the palette reduction code. This vulnerability was accidentally introduced in version 0.7.
Version 0.7.2 2012-aug-24 #
- 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. [Reported by John Sauter] ! 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 2012-mar-19 [Released by Ramona C. Truta] #
!! Fixed a regression in the reduction of palette-encoded grayscale images. (This regression was introduced in version 0.7.) [Fixed by Adam Ciarcinski]
Version 0.7 2012-feb-29 [Released by Cosmin & Ramona C. Truta] #
- Upgraded libpng to version 1.4.9.
- Upgraded zlib to version 1.2.6-optipng. !! Fixed a rarely-occurring out-of-bounds memory access error in the Z_RLE strategy in zlib. [Reported by Christopher Wichura] [Fixed by upgrading zlib]
- Added the popularly-requested option -strip. The only suboption currently supported is “-strip all”.
- Added the option -clobber. [Contributed by Maciej Pilichowski]
- Added the option -backup, as an alias of -keep. [Contributed by Ramona C. Truta]
- Added the option -silent, as an alias of -quiet. [Contributed by Ramona C. Truta]
- Deprecated the option -log. [Contributed by Ramona C. Truta]
- 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. [Fixed by Sebastian Pipping and Ville Skyttä]
- Resolved all remaining compatibility issues with libpng-1.5. [Contributed by Adam Ciarcinski]
- Added build support for clang.
- Reorganized the source directory structure.
Version 0.6.5 2011-jan-24 #
- 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. [Reported by Dmitry Marakasov] !! Fixed processing of PNG files with chunks of size 0. [Reported by Matthew Fearnley] ! Fixed a display error in the TIFF import. [Fixed by Piotr Bandurski]
- 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. [Fixed by Petr Gajdos]
- 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. [Contributed by Elias Pipping and Dmitri Zubko]
Version 0.6.4 2010-mar-14 #
- Upgraded libpng to version 1.4.1-optipng.
- Upgraded zlib to version 1.2.4-optipng.
- Added the option -nx.
- Clarified the behavior of the option -nz and the relationship between the options -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. [Fixed by Fabien Barbier]
Version 0.6.3 2009-may-18 #
- Upgraded libpng to version 1.2.36-optipng. !! Fixed a use-after-free error in the GIF reader. [Reported by Roy Tam] [Fixed by Bryan McQuade] ! Flushed the output log to display the current trial in real time. This only worked on Windows in the previous version. [Fixed by Vincent Lefèvre] ! Fixed an error in reporting unrecognized file formats.
- Removed the requirement to “fix” TIFF files that contain unrecognized metadata. [Requested by Piotr Bandurski]
- Simplified the option abbreviation rules. Option names can now be abbreviated to their shortest unique prefix, as in X11 applications.
Version 0.6.2 2008-nov-09 #
- 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 option -snip.
- Produced a more concise on-screen output in the non-verbose mode. [Contributed by Vincent Lefèvre]
- 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 2008-jul-20 #
- 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. [Reported by Nelson A. de Oliveira] ! Fixed the processing when the image reduction yields an output larger than the original. [Reported by Michael Krishtopa] ! Fixed the behavior of the option -preserve. [Reported by Bill Koch]
- Removed displaying of partial progress when abandoning IDATs under the option -v. (The percentages displayed were not very accurate.)
Version 0.6 2008-jun-15 #
- Upgraded libpng to version 1.2.29-optipng. ++ Implemented grayscale(alpha)-to-palette reductions. ++ Improved conversion of bKGD info during RGB-to-palette reductions. [Contributed by Matthew Fearnley] !! Fixed conversion of bKGD and tRNS during 16-to-8-bit reductions. [Reported by Matthew Fearnley]
- 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 option -snip, to allow the user to snip one image out of a multi-image file, such as animated GIF, multi-page TIFF, or APNG.
- Improved recovery of PNG files with incomplete IDAT. !! Fixed a crash triggered by the use of -log on some platforms. [Fixed by Stefan Brüns] ! Fixed the behavior of the options -out and -dir when the input is already optimized. [Reported by Christian Davideck]
- 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 option -v and/or the occurrence of exceptional events.
Version 0.5.5 2007-jan-28 #
- Upgraded libpng to version 1.2.15-optipng. ++ Used a previously-missed RGB-to-palette reduction opportunity for images containing 256 distinct colors. [Reported by Joachim Kluge] !! Fixed conversion of bKGD info during RGB-to-palette reductions. [Reported by Matthew Fearnley] ! Fixed pre-computation of iterations. [Reported by Matthew Fearnley] ! Eliminated a false alarm when processing RGB images with tRNS in Unix-secure mode. [Reported by Till Maas] [Fixed by Nelson A. de Oliveira] ! Fixed the behavior of the options -out and -dir when changing interlacing. [Reported by Martin Packman] ! Fixed the behavior of “-dir [DRIVE]:” on Windows.
Version 0.5.4 2006-aug-11 #
- Added the options -out and -dir, to specify the name of the output file or directory. [Requested by Alexander Lucas]
- Added support for builds based on the system-supplied libpng. [Contributed by Nelson A. de Oliveira]
Version 0.5.3 2006-jul-23 #
- 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 the option -log. ! Fixed (again) a small typo in the online help.
Version 0.5.2 2006-may-07 #
- Improved handling of inexact PNM-to-PNG conversions. ! Fixed a typo that was breaking the build on some Unix platforms. [Reported by Aaron Reitz]
Version 0.5.1 2006-apr-30 #
++ Implemented bit depth reduction for palette images.
- Upgraded libpng to version 1.2.10-optipng.
- Improved the BMP support.
- Added a Unix man page. [Contributed by Nelson A. de Oliveira]
- Allowed abbreviation of command-line options.
- Changed the option -log to accept a file name as an argument.
- Renamed the option -no to -simulate. ! Fixed an error in handling .bak files on Unix. [Reported by Adam Szojda and Nelson A. de Oliveira] ! Fixed a small typo in the help screen. [Reported by A. Costa and Nelson A. de Oliveira]
Version 0.5 2006-jan-14 #
++ Added pngxtern, a libpng add-on for external image format support: BMP (uncompressed), GIF, PNM. ++ 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 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. [Requested by Nelson A. de Oliveira]
- Modified LICENSE. It is now a verbatim spell of the zlib license.
Version 0.4.8 2005-may-10 #
- 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. [Reported by Nicolas Le Gland]
- Packed the Windows executable using UPX.
Version 0.4.7 2004-oct-30 #
!! Fixed a palette-to-gray reduction problem that occurred when having more than one alpha value per RGB triple. [Reported by Larry Hastings] ! 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 2004-oct-25 #
- 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. [Requested by Larry Hastings]
- Changed the order of trials, to perform the trials that are more likely to yield a smaller IDAT, at the beginning.
- Added the option -full to avoid the premature termination of trials; useful for debugging.
Version 0.4.5 2004-may-31 #
- Upgraded zlib to version 1.2.1.f-cos2.
- Upgraded libpng to version 1.0.15-cos2.
- Renamed the option -nx to -nz.
- Added the option -preserve to preserve file attributes (file mode, time stamp, etc.) where applicable. [Requested by Nehal Mistry] ! 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. [Contributed by Niels de Koning]
Version 0.4.4 2003-nov-20 #
- Upgraded zlib to version 1.2.1. ++ Added support for the Z_RLE strategy.
Version 0.4.3 2003-aug-12 #
! Fixed a reduction problem that caused an assertion failure. [Reported by Dimitri Papadopoulos]
Version 0.4.2 2003-jun-30 #
++ 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. [Requested by Nehal Mistry]
Version 0.4.1 2003-may-19 #
! Fixed the removal of trailing sterile palette entries.
Version 0.4 2003-may-12 #
++ 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 2003-mar-11 #
- Added support for updating sBIT during reductions. ! Fixed the reduction of the alpha channel.
Version 0.3.1 2003-feb-25 #
! Fixed the encoding of interlaced images when they become larger than the input. [Reported by James H. Cloos, Jr.]
- Added the HISTORY document (this file).
Version 0.3 2003-feb-24 #
- Announced 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 2001-dec-27 #
- Added support for optimization level presets.
- Added a user option for changing the interlacing.
Version 0.1 2001-dec-17 #
- Added support for chunk I/O status annotation. This improves the speed of OptiPNG significantly.
- Added structured exception handling via cexcept.
Version 0.0.1 2001-dec-10 #
- Introduced OptiPNG. ++ Compressed PNG IDAT data repeatedly, iterating through zlib compression and strategy levels, as well as PNG delta filters.