Pngcrush Changelog

What's new in Pngcrush 1.8.13

Nov 7, 2017
  • Add "exit(0)" after processing "-version" argument, to avoid
  • displaying the Usage information (bug report by Peter Hagan,
  • Issue #76).
  • Fix problem with MacOS prior to Sierra; it uses CLOCK_MONOTONIC
  • for some other purpose (bug report and help developing patch by
  • Github user "ilovezfs", Homebrew/homebrew-core PR#16391).

New in Pngcrush 1.7.81 (Dec 23, 2014)

  • Fixed off-by-one error in calculation of plte_len.

New in Pngcrush 1.7.80 (Dec 23, 2014)

  • Added "-reduce_palette" and "-noreduce_palette" options.
  • Enable reduce_palette when the "-new" or "-reduce" option is used.

New in Pngcrush 1.7.79 (Dec 23, 2014)

  • Fixed bug in -plte_len N option.

New in Pngcrush 1.7.78 (Dec 23, 2014)

  • Made "-s" and "-silent" options suppress libpng warnings.

New in Pngcrush 1.7.77 (Dec 23, 2014)

  • Updated libpng to version 1.6.13.

New in Pngcrush 1.7.76 (Dec 23, 2014)

  • Updated libpng to version 1.6.12.

New in Pngcrush 1.7.75 (Dec 23, 2014)

  • Reverted libpng to version 1.6.10 due to a misplaced statement in png.c

New in Pngcrush 1.7.74 (Dec 23, 2014)

  • Fixed "-zmem" option (only "-zm" would work since version 1.7.62).

New in Pngcrush 1.7.73 (Dec 23, 2014)

  • Restored calls to png_set_crc_action() which had been removed from version 1.7.72 for some testing and inadvertently not restored
  • Changed "fix" internal variable name to "salvage" (still set with "-fix")
  • Added code to fix/salvage PNG with "bad adaptive filter value" error
  • Avoid calculating CRC during compression trials except for the last trial when the output is actually written
  • Fixed a bug with reducing 16-bit images to 8-bit using "-reduce" option

New in Pngcrush 1.7.71 (Dec 23, 2014)

  • Built the Windows binaries using -DTOO_FAR=32767; neglected to do this in versions 1.7.42 through 1.7.70, which caused the Windows binaries to produce different (usually a few bytes larger) results than Linux.

New in Pngcrush 1.7.69 (Dec 23, 2014)

  • Updated libpng to version 1.6.6.

New in Pngcrush 1.7.68 (Dec 23, 2014)

  • Check for NULL return from malloc().
  • Undefine CLOCKS_PER_SECOND "1000" found in some version of MinGW.
  • Replaced most "atoi(argv[++i])" with "pngcrush_get_long" which does "BUMP_I; strtol(argv[i],ptr,10)" and added pngcrush_check_long macro to detect malformed or missing parameters (debian bug 716149).
  • Added global_things_have_changed=1 when reading -bkgd.
  • The "-bit_depth N" option did not work reliably and has been removed.

New in Pngcrush 1.7.67 (Dec 23, 2014)

  • Fixed handling of "-text" and "-ztext" options for text input. They had been reduced to "-t" and "-z" with an incorrect argument (3 instead of 2) in version 1.7.62.

New in Pngcrush 1.7.66 (Dec 23, 2014)

  • Revised pngcrush_examine_pixels_fn() to fix some incorrect reductions.

New in Pngcrush 1.7.65 (Dec 23, 2014)

  • Do not allow any colortype or depth reductions if acTL is present
  • Added warnings to explain why any requested reductions were not allowed

New in Pngcrush 1.7.63 (Dec 23, 2014)

  • Add "int dowildcard=-1;" in an attempt to get wildcard arguments working in the cross-compiled MinGW executables.

New in Pngcrush 1.7.62 (Dec 23, 2014)

  • Remove old filename before renaming, when using the "-ow" option on any Windows platform, not just CYGWIN (see log entry for pngcrush-1.7.43).
  • Reverted error with handling single-character options like "-v", introduced
  • in 1.7.61.

New in Pngcrush 1.7.61 (Jun 12, 2013)

  • Check sBIT chunk data to see if reduction to gray or to 8-bit is permitted,
  • i.e., the RGB sBIT values are equal to each other or the sBIT values are
  • not greater than 8, respectively.
  • Do not try to make_opaque if the tRNS chunk is found.
  • Added warning when ignoring an invalid commandline option.
  • Improved brute_force handling with specified level, filter, or strategy.

New in Pngcrush 1.7.60 (Jun 12, 2013)

  • Revise -reduce so reducing from color-type 6 to grayscale works.
  • Issue a warning if reducing bit depth or color type would violate various
  • chunk dependencies, and do not perform the action:
  • Do not reduce to grayscale if a color bKGD chunk, sBIT or iCCP chunk
  • is present.
  • Do not reduce bit depth if bKGD or sBIT chunk is present.
  • Do not reduce palette length if the hIST chunk is present.
  • Set "found_iCCP" flag to zero to avoid re-reading a bad iCCP chunk.

New in Pngcrush 1.7.59 (Jun 12, 2013)

  • Show the acTL chunk in the chunk list in verbose output.
  • Fixed several bugs reported by pornel at users.sf.net:
  • Do not call png_set_benign_errors when PNG_BENIGN_ERRORS_SUPPORTED
  • is not defined
  • Renamed PNG_UNUSED() macro PNGCRUSH_UNUSED().
  • Moved a closing bracket inside the PNGCRUSH_LOCO block.
  • Moved the declaration of "new_mng" outside a PNGCRUSH_LOCO block.
  • Put reference to "input_format" inside a PNGCRUSH_LOCO block.
  • Moved declarations of mng_out and mngname inside a PNGCRUSH_LOGO block.

New in Pngcrush 1.7.58 (Jun 12, 2013)

  • Do not enable reduce_palette by default for "-reduce", "-new", or "-old".
  • It still is failing for some files.

New in Pngcrush 1.7.57 (Jun 8, 2013)

  • Added "-new" option that turns on "-reduce" and "-force" which will be
  • the default settings for version 1.8.0 and beyond.
  • Added "-old" option that turns off "-reduce" and "-force" which are the
  • current default settings.
  • Updated copyright year for zlib-1.2.7-1.
  • Reverted to libpng-1.5.15 to be able to read old PNG files with TOO FAR
  • errors. This will of course only work with the embedded libpng.

New in Pngcrush 1.7.56 (Jun 8, 2013)

  • Only use pngcrush_debug_malloc() and pngcrush_debug_free() if the result
  • is going to be shown.
  • Added PNG_PASS_ROWS, PNG_UNUSED, and other macro definitions, when building
  • with libpng-1.4.x and older libpng versions.
  • Multiplied rowbytes by 8/bit_depth when using the system library because
  • we do not call png_read_transform_info(). This prevents a crash when
  • reading sub-8-bit input files.

New in Pngcrush 1.7.53 (Jun 8, 2013)

  • Removed plte_len stuff from the "To do" list because it is done.
  • Shorten the indexed-PNG tRNS chunk length if it has more entries than the PLTE chunk.

New in Pngcrush 1.7.52 (Jun 8, 2013)

  • Added license info for cexcept.h, libpng, and zlib.
  • Added consideration of "zopfli" compression to the "To do" list.
  • Fixed a typo that caused a cHRM chunk to be "found" if an iCCP chunk
  • were present.
  • Reset best_byte_count before trial loop.
  • Revise global png_set_keep_unknown_chunks() calls to avoid a libpng16
  • warning.
  • Reset "intent" to "specified_intent" before trial loop.
  • Reset "plte_len" to "specified_plte_len" before trial loop.
  • Initialize length of each trial to 0x7fffffff so any untried method
  • is not the "best method".

New in Pngcrush 1.7.51 (Jun 8, 2013)

  • Added "-noreduce" option, in preparation for "-reduce" becoming the
  • default behaviour in version 1.8.0. This turns off lossless bit depth,
  • color type and palette reduction, and opaque alpha channel removal.
  • Zero out the high byte of transparent color for color-type 0 and 2,
  • when reducing from 16 bits to 8.
  • Undefined a bunch of stuff in pngcrush.h that we do not use, saves about
  • 100 kbytes of executable file size in addition to about 50k saved by
  • undefining the simplified API.
  • Fixed double-underscore typo in an #ifdef in png.c
  • If "-reduce" is on and the background index is larger than the reduced
  • palette_length+1, reduce it to the palette_length+1.

New in Pngcrush 1.7.50 (Mar 5, 2013)

  • Removed completed items from the "To do" list.
  • Ignore the argument of the "plte_len" argument and just set the "reduce_palette" flag.

New in Pngcrush 1.7.41 (Feb 14, 2013)

  • Reverted to version 1.7.38. Versions 1.7.39 and 40 failed to open an output file.

New in Pngcrush 1.7.40 (Feb 14, 2013)

  • Revised the "To do" list.

New in Pngcrush 1.7.39 (Feb 14, 2013)

  • Removed "PNGCRUSH_COUNT_COLORS" blocks which I no longer intend to implement because that feature is already available in ImageMagick. Kept "reduce_to_gray" and "it_is_opaque" flags which I do hope to implement
  • soon.
  • Changed NULL to pngcrush_default_read_data in png_set_read_fn() calls, to fix an insignificant error introduced in pngcrush-1.7.14, that caused most reads to not go through the alternate read function. Also always set this function, instead of depending on STDIO_SUPPORTED.

New in Pngcrush 1.7.38 (Feb 14, 2013)

  • Bail out of a trial if byte count exceeds best byte count so far.
  • Added -bail and -nobail options. Use -nobail to get a complete report of filesizes.
  • Added -blacken option, to enable changing the color samples of any fully-transparent pixels to zero in PNG files with color-type 4 or 6, potentially improving their compressibility.

New in Pngcrush 1.7.37 (Feb 14, 2013)

  • Reverted pngcrush.c back to 1.7.35 and fixed the bug with PLTE handling.

New in Pngcrush 1.7.10 (May 21, 2011)

  • Added missing "(...)" in png_get_uint_32().
  • Only compile png_get_uint_32(), etc., when PNG_LIBPNG_VER < 1.2.9
  • Revised help info for "-zitxt".

New in Pngcrush 1.7.9 (May 21, 2011)

  • Defined TOO_FAR == 32767 in pngcrush.h (instead of in deflate.c)
  • Revised the "nolib" Makefiles to remove reference to gzio.c and pnggccrd.c

New in Pngcrush 1.7.8 (May 21, 2011)

  • Removed gzio.c

New in Pngcrush 1.7.7 (May 21, 2011)

  • Updated bundled libpng to version 1.4.0.
  • Check the "-plte_len n" option for out-of-range value of n.
  • Changed local variable "write" to "z_write" in inffast.c (zlib-1.2.3.4)
  • to avoid shadowed declaration warning

New in Pngcrush 1.7.6 (May 21, 2011)

  • Change some "#if defined(X)" to "#ifdef X" according to libpng coding style.
  • Added some defines to suppress pedantic warnings from libpng-1.2.41beta15
  • and later. A warning about deprecated access to png_ptr->zstream is
  • otherwise unavoidable. When building the embedded libpng, a warning
  • about png_default_error() returning is also otherwise unavoidable.
  • Write premultiplied alpha if output extension is .ppng and
  • PNG_READ_PREMULTIPLIED_ALPHA_SUPPORTED is set (needs libpng-1.5.0).
  • Check the "-m method" option for out-of-range method value.

New in Pngcrush 1.7.4 (May 21, 2011)

  • Use unmodified pngconf.h from libpng-1.2.41beta05 or later.

New in Pngcrush 1.7.3 (May 21, 2011)

  • Print contents of text chunks after IDAT, even when the -n option is used. This requires a slight modification of pngconf.h, when libpng-1.2.x is used.

New in Pngcrush 1.7.2 (May 21, 2011)

  • Added check for "verbose" on some printf statements.

New in Pngcrush 1.7.1 (May 21, 2011)

  • Revised some prototypes to eliminate "Shadowed Declaration" warnings.
  • Moved warning about discarding APNG chunks to the end.
  • Replaced *.tar.lzma with *.tar.xz in the distribution.

New in Pngcrush 1.6.10 (Apr 14, 2009)

  • Add sTER chunk support

New in Pngcrush 1.6.4 (Aug 25, 2007)

  • Fixed bug in handling of undocumented -trns_a option (Michal Politowski).
  • Fixed bug with "nosave" handling of unknown chunks.