Simple, modern libpng alternative
Fixes
Fixes
Other
debian
subdirectory with outdated filesFixes
spng_set_option()
not being respected in some casesspng_get_png_buffer()
not setting an error code in some casesSPNG_EBUFSIZ
New
SPNG_IMG_COMPRESSION_LEVEL
, see Decode options
Other
Fixes
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
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
SPNG_ENCODE_TO_BUFFER
option must be setFixes
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
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
spng_set_option()
.Fixes
Improved
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
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
New
SPNG_CRC_DISCARD
is now supportedBugfixes
SPNG_CTX_IGNORE_ADLER32
spng_get_text/splt()
not reading chunks before setting n_text
/n_splt
Changes
fmin()
for DJGPP compatibility#warning
in favor of #pragma message
spng_get_<chunk>()
functions will read chunks before checking all argumentsChanges to the default behavior were made for libpng compatibility:
SPNG_CRC_ERROR
to SPNG_CRC_DISCARD
SPNG_CRC_USE
now also ignores checksums in DEFLATE streamsKnown issues