NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #479 most downloaded on crates.io
PNG decoding and encoding library in pure Rust
Last release 7 months ago
14 Feb 2026
Release timing varies
gaps range from 2 weeks to 7 months
Some releases are documented
notes for 29 of 56 stable releases
1 version withdrawn
withdrawn after publishing
11 years old
61 releases · first in 2015
Added Filter::MinEntropy for encoding, which selects the filter that minimizes the Shannon entropy of the filtered row. ([#647])
Filter::MinEntropy for encoding, which selects the filter that
minimizes the Shannon entropy of the filtered row. (#647)ScaledFloat::SCALING constant public. (#650)portable_simd Paeth unfiltering for 3bpp and 4bpp images on nightly.
(#632, #633)acTL chunks instead of producing errors. (#651)acTL frame counts to be valid PNG 4-byte integers (capped at 2^31-1).
(#673)One column per quarter.
Removed deprecated Info::encode and Encoder::set_srgb methods.
Info::encode and Encoder::set_srgb methods.Decoder now requires a reader that implements Seek and BufRead traits.StreamingDecoder::update now takes a structured UnfilterBuf argument
instead of a direct reference to a vector. This allows in-place
decompression. There is a public constructor for UnfilterBuf.Decoder::output_buffer_size and output_line_size now return
Option<usize> to reflect that these calculations no longer overflow on some
targets where the required buffers can not be represented in the address
space. They return the mathematically correct size where possible.Decoded enum returned from StreamingDecoder::update was simplified to
no longer contains any chunk payload data. Instead, it now contains only
chunk events where every chunk that was started will eventually be ended by
ChunkComplete, BadAncillaryChunk or SkippedAncillaryChunk.BadAncillaryChunk event
but no longer returned a DecodingError. This includes text chunks as well
as many metadata chunks (except for fcTL that we deem crucial to the
parser's understanding of the image sequence in an APNG despite being
technically ancillary).Reader::read_row method.splat_interlaced_row, which implements an alternative method for
merging Adam7 interlaced lines into the output buffer that is more suitable
for the presentation of progressive states of the buffer.Adam7Variant documenting the various methods for applying interlaced
rows and to prepare an API to progressively read frames through Decoder.acTL chunk is now ignored when it is invalid, instead of producing
errors while reading or decoding the following APNG chunks.fcTL chunk for the default image to match the IHDR's
indicate image size is now enforced.Removed deprecated Info::encode and Encoder::set_srgb methods.
Cumulative to the last 0.17 release
Removed deprecated Info::encode and Encoder::set_srgb methods.
Improved the compression settings API for encoding.
Decoder now requires a reader that implements Seek and BufRead traits.
Bump bitflags dependency to 2.0.
StreamingDecoder::update now takes a structured UnfilterBuf argument
instead of a direct reference to a vector. This allows in-place
decompression. There is a public constructor for UnfilterBuf.
The methods Decoder::output_buffer_size and output_line_size now return
Option<usize> to reflect that these calculations no longer overflow on some
targets where the required buffers can not be represented in the address
space. They return the mathematically correct size where possible.
Added Reader::read_row method.
Add support for parsing eXIf chunk.
Treat most auxiliary chunk errors as benign.
Added splat_interlaced_row, which implements an alternative method for
merging Adam7 interlaced lines into the output buffer that is more suitable
for the presentation of progressive states of the buffer.
Added Adam7Variant documenting the various methods for applying interlaced
rows and to prepare an API to progressively read frames through Decoder.
The decoding of Adam7 interlaced data is now much faster.
The acTL chunk is now ignored when it is invalid, instead of producing
errors while reading or decoding the following APNG chunks.
The requirement of the fcTL chunk for the default image to match the IHDR's
indicate image size is now enforced.
More minor format errors in auxiliary chunks are now ignored by the decoder,
instead disregarding the malformed chunk.
Adam7 Interlacing on 32-bit targets now handles some cases correctly that
previously wrote some bytes to the wrong pixel indices due to overflows.
Nothing published for this version
Nothing published for this version
Deprecate Info::encode ([#550])
Add a public API to advance to the next frame in APNG decoder ([#518])
Added public API to consume interlaced rows one by one
UnexpectedEof, which lets you start parsing a file before it's fully received over the network (#496)Release 0.17.13
Release 0.17.13 (#472)
Release 0.17.12
Release 0.17.12 (#468)
Info struct.-Z minimal-versions.Release 0.17.11
Release 0.17.11 (#455)
new_with_info constructor for encoder.Reader::finish to read all the auxiliary chunks that comes after the
image.Enable encoding pixel dimensions
Fixed a bug in ICC profile decompression.
Substantially optimized encoding and decoding:
Nothing published for this version
Fixed handling broken tRNS chunk.
Added Decoder::read_header_info to query the information contained in the PNG header.
Decoder::read_header_info to query the information contained in the
PNG header.Fixed a regression, introduced by chunk validation, that made the decoder sensitive to the order of gAMA, cHRM, and sRGB chunks.
gAMA, cHRM, and sRGB chunks.Added {Decoder,StreamDecoder}::set_ignore_text_chunk to disable decoding of ancillary text chunks during the decoding process (chunks decoded by defau
{Decoder,StreamDecoder}::set_ignore_text_chunk to disable decoding of
ancillary text chunks during the decoding process (chunks decoded by default).#[forbid(unsafe_code)] again. This may come at a minor performance
cost when decoding ASCII text for now.Fixed a bug where Writer::finish would not drop the underlying writer. This would fail to flush and leak memory when using a buffered file writers.
Writer::finish would not drop the underlying writer. This
would fail to flush and leak memory when using a buffered file writers.Writer::finish will now eagerly flush the underlying writer,
returning any error that this operation may result in.Added support for encoding and decoding tEXt/zTXt/iTXt chunks.
Encoder::validate_sequence to enable validation of the written frame
sequence, that is, if the number of written images is consistent with the
animation state.Writer::finish to fully check the write of the end of an image
instead of silently ignoring potential errors in Drop.Writer::write_chunk method now validates that the computed chunk length
does not overflow the limit set by PNG.flush or write of an underlying writer panicked, or in some other uses of
StreamWriter.Fix panic in adaptive filter method sum_buffer
sum_bufferImprove ergonomics of encoder set_palette and set_trns methods
Nothing published for this version
Added Encoder::set_trns to register a transparency table to be written.
Encoder::set_trns to register a transparency table to be written.Fixed silent integer overflows in buffer size calculation, resulting in panics from assertions and out-of-bounds accesses when actually decoding. This
Clone impl for Info struct.Decoding of APNG subframes is now officially supported and specified. Note that dispose ops and positioning in the image need to be done by the caller
miniz_oxide for decompressing image data, with 30%-50% speedup
in common cases and up to 200% in special ones.The fdAT frames are no longer inspected when the main image is read. This would previously be the case for non-interlaced images. This would lead to i
"invalid filter method".Fix encoding with filtering methods Up, Avg, Paeth
Added method constructing an owned stream encoder.
Addressed files bloating the packed crate
Address use of deprecated error interfaces
Fix panic while trying to encode empty images. Such images are no longer accepted and error when calling write_header before any data has been written
write_header before any data has been
written. The specification does not permit empty images.Fix EXPAND transformation to leave bit depths above 8 unchanged
EXPAND transformation to leave bit depths above 8 unchangedFix encoding writing invalid chunks. Images written can be corrected: see https://github.com/image-rs/image/issues/1074 for a recovery.
term, rand dev-dependencyshow example program requires a newer compiler than 1.34.2 on
some targets due to depending on glium. This is not considered a breaking
bug.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →