Libspng Versions Save

Simple, modern libpng alternative

v0.6.1

3 years ago

Bugfixes

  • Fixed return value in example.c for valid images
  • Fixed MSVC build with miniz (Matthew Albrecht)
  • Fixed argument types for spng__zalloc()
  • Fixed some signedness warnings

Changes

Changes to the default behavior were made for libpng compatibility:

  • Ignore tRNS chunks for grayscale alpha / truecolor alpha images - #118
  • Do not check the text field of tEXt, zTXt chunks - #123

v0.6.0

3 years ago

This release is backward compatible.

New

  • Progressive image decode support, added new functions:

    • spng_decode_scanline() - Decodes a single scanline
    • spng_decode_row() - Decodes and deinterlaces a scanline
    • spng_get_row_info() - Get current scanline, row information
  • Added support for reading tEXt, iTXt, zTXt and iCCP color profile chunks, all standard chunks are supported in this release.

  • Added support for building with miniz, spng.c/h and miniz.c/h can be used together without additional dependencies

  • Added output format SPNG_FMT_PNG, it represents the PNG's format in host-endian (thanks to Matthew Stadelman for initial implementation)

  • Added output format SPNG_FMT_RAW, it represents the PNG's format in big-endian (Matthew Stadelman)

  • Added output format SPNG_FMT_RGB8, conversion is supported from any color type and bit depth

  • Added grayscale output formats SPNG_FMT_G8, SPNG_FMT_GA8 and SPNG_FMT_GA16, in this release conversion is only supported from a subset of grayscale and bit depth combinations, see documentation for details

  • Added support for decoding from a FILE* with spng_set_png_file()

  • Added SPNG_CTX_IGNORE_ADLER32 context flag to ignore checksums in DEFLATE streams

  • Added enums for filter types and interlace method

  • Added Meson option use_miniz and compiler option SPNG_USE_MINIZ for building with miniz

  • Added Meson option benchmarks to run benchmarks provided by spngt, this requires Git LFS.

  • Added Meson option static_zlib to link the static version of zlib

  • Multiversioned defilter_up() function (enabled for GCC + glibc)

Changes

  • spng_decode_image() takes a void* for the output buffer (was unsigned char*)

  • Reaching chunk size- or cache limits is now handled as an out-of-memory error

  • Out-of-range palette indices are handled as black opaque pixels when decoding, this matches libpng's default behavior

  • PNG image row length and output row length is now limited to 2^32-1 (UINT32_MAX)

Bugfixes

  • Fixed an IDAT streaming bug (Mathieu Mallet)
  • Fixed CMake install issues
  • Fixed bKGD handling and a testsuite issue on big-endian
  • Fixed setting of PLTE presence bit (Matthew Stadelman)
  • Added missing error condition for indexed images without a palette
  • Fixed zlib constness warnings
  • Fixed ordering checks for tRNS, hIST and bKGD chunks

Known issues

  • Decoding to SPNG_FMT_G8, SPNG_FMT_GA8 and SPNG_FMT_GA16 output formats is not supported for all PNG color type and bit depth combinations, see documentation for details
  • Gamma correction is not implemented for SPNG_FMT_PNG, SPNG_FMT_G8, SPNG_FMT_GA8 and SPNG_FMT_GA16
  • spng_crc_set_action() is partially implemented, SPNG_CRC_DISCARD has no effect

v0.6.0-rc1

4 years ago

This is a release candidate, the API may change for the stable release! Share your feedback on the API here or on Gitter!

UPDATE: This release is broken, use https://github.com/randy408/libspng/commit/a0b7323558e0f45e899cd7b5f8ddde2e18c9709e for testing progressive decode functionality with SPNG_FMT_PNG.

New features:

  • Progressive image decode support, added new functions:
    • spng_decode_scanline() - decodes a single scanline
    • spng_decode_row() - decodes and deinterlaces a scanline
    • spng_get_row_info() - get scanline/row info including the filter type
  • New output format SPNG_FMT_RGB8, conversion is supported from any color type and bit depth
  • New output format SPNG_FMT_PNG, this always matches the PNG's format in host-endian
  • Added support for decoding from a FILE* via spng_set_png_file()
  • Added SPNG_CTX_IGNORE_ADLER32 context flag to ignore checksums in DEFLATE streams
  • Enums for filter types, interlace method
  • New Meson option benchmarks to run benchmarks provided by spngt, this requires Git LFS.
  • New Meson option to link the static version of zlib: static_zlib
  • Multiversioned defilter_up() function (enabled for GCC + glibc)

Documentation:

  • Added notes on build optimization level
  • Added section on decoding arbitrary files

Bugfixes:

  • Fixed an IDAT streaming bug (Mathieu Mallet)
  • Fixed CMake install issues
  • Fixed bKGD handling and a testsuite issue on big-endian (Robert-André Mauchin)
  • Fixed setting of PLTE presence bit (Matthew Stadelman)
  • Added missing error condition for indexed images without a palette
  • Fixed zlib constness warnings
  • Fixed ordering checks for tRNS, hIST and bKGD chunks