Libspng Versions Save

Simple, modern libpng alternative

v0.7.4

11 months ago

Fixes

  • CMake static build fixes - @coeps-github
  • Added CMake package support - @johannesschaeufele
  • Fix Meson build with clang-cl - @neheb
  • Fix invalid decode error for zero-length EXIF chunks

v0.7.3

1 year ago

Fixes

  • Fixed includes when used as CMake subproject (@benediktschmitt)
  • Make finding zlib in-tree easier for CMake (@michaelmalonenz)
  • Fixed Meson build under mingw32 (@neheb)
  • Fixed -Wshadow warning (@Loobinex, @xtremeqg)
  • Fixed references, typos in documentation (@ocpalo, @danieljennings, @timgates42)
  • Other minor fixes and cleanup

Other

  • Updated Meson zlib wrap to v1.2.13
  • Removed debian subdirectory with outdated files

v0.7.2

2 years ago

Fixes

  • Re-enabled ARM NEON optimizations for indexed color images
  • Fixed encoder options set with spng_set_option() not being respected in some cases
  • Fixed spng_get_png_buffer() not setting an error code in some cases
  • Fixed encoder heap overflow with specially crafted images (https://github.com/randy408/libspng/issues/196)
  • Fixed 4GB progressive decode/encode limitation on 32-bit (https://github.com/randy408/libspng/issues/198)
  • Updated error string for SPNG_EBUFSIZ

New

  • Decoder now exposes an estimate of image compression level through SPNG_IMG_COMPRESSION_LEVEL, see Decode options
  • Added documentation for all decode and encode options, added notes on encoder configuration

Other

  • Added encode fuzzer to ensure robustness of code; Fuzzer will run on PR's and continuously on OSS-Fuzz alongside the decode fuzzer
  • Updated example code

v0.7.1

2 years ago

Fixes

  • Fixed crash with ARM NEON optimization for indexed color images

v0.7.0

2 years ago

This release is funded by NLNet!

To support further development consider sponsoring the project on OpenCollective.

New

  • Encode support with interlacing for all bit depths and color types

  • Progressive image encoding API

  • Adaptive filtering, custom filter selection

  • Chunk write support for all standard chunks including oFFs and eXIf extensions

  • Added functions for configuring the encoder, decoder: spng_set_option(), spng_get_option()

  • Added options to configure zlib, chunk count limit and handling of unknown chunks

  • Added spng_get_gama_int(), spng_set_gama_int(), spng_decode_chunks()

  • Read and write support for unknown chunks

Decoder

  • Filter- and palette expansions optimizations using ARM NEON intrinsics, improved decode performance for common use cases:

  • ~30% faster with true color and 19% faster with indexed color images (details)

  • NEON optimizations are enabled by default on ARM64

Changes

  • Unknown chunks are now ignored by default, this can be configured with spng_set_option()

  • Introduced a default chunk count limit of 1000, this is independent of other limits

Changes - v0.7.0-rc3

  • Encoder no longer writes to an internal buffer by default, the SPNG_ENCODE_TO_BUFFER option must be set

Fixes

  • bKGD, tRNS chunk high bits are now preserved

  • Force cdecl calling convention for allocator callbacks on Windows (@danielkrupinski)

Improved

  • Expanded testsuite to verify chunk data, encoding of PNG's against libpng

  • Expanded documentation, added libpng migration guide

v0.7.0-rc3

2 years ago

This release is funded by NLNet!

This is a release candidate, the API may change for the stable release!

Share your feedback on the API here or on Gitter!

New

  • Encode support with interlacing for all bit depths and color types

  • Progressive image encoding

  • Encode to a stream, file or buffer managed by the library

  • Low overhead adaptive filtering, custom filter selection

  • Chunk write support for all standard chunks including oFFs and eXIf extensions, unknown chunks

  • ARM NEON decoder optimizations (since v0.7.0-rc2)

  • Added spng_get_png_buffer(), this function returns the encoded PNG buffer if no output stream or file is set.

  • Added functions for configuring the encoder, decoder: spng_set_option(), spng_get_option()

  • Added location field to struct spng_unknown_chunk, this specifies the relative location of the chunk (new since v0.7.0-rc1)

  • Added spng_get_gama_int(), spng_set_gama_int()

  • Added spng_encode_chunks()

Changes

  • Unknown chunks are now ignored by default, this can be configured with spng_set_option().

Fixes

  • bKGD, tRNS chunk high bits are now preserved

Improved

  • Expanded testsuite to verify chunk data, encoding of PNG's against libpng

v0.7.0-rc2

2 years ago

This release is funded by NLNet!

This is a release candidate, the API may change for the stable release!

Share your feedback on the API here or on Gitter!

New

  • Filter- and palette expansions optimizations using ARM NEON intrinsics, improved decode performance for common use cases:

  • ~30% faster with true color and 19% faster with indexed color images (details)

  • The new optimizations are enabled by default on ARM64

v0.7.0-rc1

3 years ago

This release is funded by NLNet!

This is a release candidate, the API may change for the stable release!

Share your feedback on the API here or on Gitter!

New

  • Unknown chunk read support

Bugfixes

  • Fixed spng_get_splt()

v0.6.3

3 years ago

This release is funded by NLNet!

Improved

  • Improved decoder robustness, malformed images are less likely to cause a decoder error

  • Expanded documentation on decoder error handling

  • Expanded testsuite, code cleanups

  • Fixed MSVC warnings

Upcoming features

The next minor release is v0.7.0 and will include:

  • Unknown chunk support

  • ARM NEON optimizations

  • Encode support

v0.6.2

3 years ago

New

  • The CRC action SPNG_CRC_DISCARD is now supported

Bugfixes

  • Fixed handling of SPNG_CTX_IGNORE_ADLER32
  • Introduced a workaround for a miniz bug that can lead to an infinite loop - #150
  • Fixed spng_get_text/splt() not reading chunks before setting n_text/n_splt

Changes

  • Dropped use of fmin() for DJGPP compatibility
  • Dropped use of #warning in favor of #pragma message
  • spng_get_<chunk>() functions will read chunks before checking all arguments

Changes to the default behavior were made for libpng compatibility:

  • Changed the default CRC action for ancillary chunks from SPNG_CRC_ERROR to SPNG_CRC_DISCARD
  • Setting SPNG_CRC_USE now also ignores checksums in DEFLATE streams
  • Ancillary chunks with zlib data errors are discarded by default
  • Ignore sBIT chunk length for truecolor alpha images - #130
  • Ignore bKGD chunk length for truecolor (alpha) images - #156

Known issues

  • Non-critical errors may still cause an image to not load - #132