NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #763 most downloaded on crates.io
TIFF decoding and encoding library in pure Rust
Last release 8 months ago
10 Feb 2026
Ships unpredictably
gaps range from 2 weeks to 1.4 years
Most releases are documented
notes for 20 of 26 stable releases
1 version withdrawn
withdrawn after publishing
8 years old
28 releases · first in 2018
Added support for webp compression (as per GDAL) under the webp feature flag (default: off).
Additions:
webp compression (as per GDAL) under the webp feature flag (default: off).Decoder::image_ifd, creating an IfdDecoder of the current IFD.IfdDecoder::directory, returning the Directory underlying it.LowerHex and UpwerHex implementations for IfdPointer.Notes:
tiff-ls demonstrates use of the new features.Planar files can now be read with Decoder::read_image_to_buffer if the limits allow for such a large buffer size. Previously only the first plane was
Changes:
Decoder::read_image_to_buffer if theFixes:
debug_assert of ValueBuffer caused its use inIfdDecoder::find_tag_buf to panic outside release mode when the bufferAdditions:
ColorType::{num_samples, bit_depth} are now public. ThisOne column per quarter.
The variants RationalBig and SRationalBig of decoder::Value are deprecated as they have no corresponding TIFF type and were not constructed during dec…
Late note: We no longer distribute benchmark images (tests/benches) as part
of the crate itself. Please fetch them from upstream.
Fixes:
tags are now all marked with a representation ofrepr(u16)) and variants are explicitlyUnknown variants.RationalBig and SRationalBig of decoder::ifd::Value areAdditions:
tags now generally implement TiffValue and can be handed to theDirectoryEncoder::write_tag method. Unlike primitive types they do nottags::ValueBuffer, a byte-based buffer for tags with a runtime valueIfdDecoder::find_tag_{buf,bytes} to read tag values into aValueBuffer or byte slice respectively without interpreting themDirectoryEncoder::write_{data,tag}_buf that takes a ValueBufferDirectoryEncoder::write_entry{,_buf,_bytes} that encode theirEntry for later use, withoutTiffValue trait is now implemented for several builtin tags::* typesTiffValue trait is now implemented for [T; N] for all types thatDirectory now implements FromIterator<(Tag, Value)> .
Directory now implements FromIterator<(Tag, Value)>.Changes:
ExtraSamples tag. The sample count must nowDecoder::read_image method return planes one-after-another depending onDecoder::read_image_to_buffer now takes &mut DecodingResult and resizesDecodingBufferas_bytes_mut andread_image_bytes.const. Note that does not guarantee anyFixes:
ChromaSubsampling tag as (1, 1) to(2, 2).Additions:
CieLab color type.DecodingResult::resize_to to create a buffer with a matching sampleByteOrder::native to access the platform's native endianness.ByteOrder::convert to change the byte-order of values in a byteType as described at runtime.DirectoryOffset::new to encode a directory whose offset is known toEncoder::extra_samples to encode images with more samples than theirDirectoryEncoder::extend_from to encode multiple tag entries from aDecoder::read_coding_unit_bytes to retrieve data of correspondingGroup 4 fax is now recognized as a compression type and decoded.
New features:
fax is now recognized as a compression type and decoded.fax controls related dependencies, on by default.Changes:
Fixes:
Added a dedicated Directory type
New features:
Directory type (#277)Directory publicly (#278)Decoder.inner() to access the underlying reader (#289)Changes:
Fixes:
This republishes 0.10.1, fixing an accidentally removed method (Decoder::find_tag_unsigned_vec).
Added a dedicated Directory type
New features:
Directory type (#277)Directory publicly (#278)Decoder.inner() to access the underlying reader (#289)Changes:
Fixes:
Release 0.10.0
Release 0.10.0 (#271)
New features:
ColorType::Multiband and ColorType::CMYKA.Value::Byte and Value::SignedByte to represent u8 and i8 tags.Decoder::tag_iter method allows iterating over all tags in the image.zstd feature flag.Changes:
u16 and i16 values to be intepreted as Value::Short and
Value::SignedShort respectively.zune-jpeg crate instead of
jpeg-decoder.deflate, jpeg, and lzw compression methods are now controlled by
(enabled by default) feature flags.Fixes:
Release 0.9.1
Release 0.9.1 (#220)
New features:
Fixes:
Added support for photometric interpretation YCbCr and added related ColorType .
New features:
YCbCr and added relatedColorType.Fixes:
The jpeg decoder gained to ability to utilize the Photometric Interpretation directly instead of relying on a custom APP segment.
Changes:
Fixes:
Removed deprecated methods of Decoder: init, read_jpeg, read_strip_to_buffer, read_strip, read_tile. The implicit chunk (row or tile) index order coul…
Changes:
Cargo.toml.TiffFormatError and TiffUnsupportedError are now
marked with the #[non_exhaustive] attribute.Value, Tags, Type, CompressionMethod,
PhotometricInterpretation, PlanarConfiguration, Predictor,
ResolutionUnit, SampleFormat are also changed.Removals:
Decoder: init, read_jpeg,
read_strip_to_buffer, read_strip, read_tile. The implicit chunk (row or
tile) index order could not be easily tracked by the caller. New separate
utility interfaces may be introduced at a later point, for now callers are
obligated to choose their own.Fixes:
jpeg_decoder = 0.3.Creating an encoder for invalid, zero-sized images is now rejected.
New features:
Fixes:
rows_per_strip better, fixing a division-by-zero.Allow decoder to access specific tiles by index.
New features:
Changes:
Encoding with ImageEncoder now takes an optional compressor argument, allowing compressed encoding. See the methods TiffEncoder::{new_image,write_imag
New features:
ImageEncoder now takes an optional compressor argument,
allowing compressed encoding. See the methods
TiffEncoder::{new_image,write_image}_with_compression.jpeg_decoder has been upgraded, now supports lossless JPEG.Changes:
Encoding signed integer formats is now supported.
New features:
cargo fuzz.Changes:
Fixes:
Notes:
Our CI has warned that this version no longer builds on 1.34.2 out of the
box. We're still committed to the MSRV on this major version yet one
dependency—flate2—has already bumped it in a SemVer compatible version of its
own. This is out-of-our-control (cargo's dependency resolution does not allow
us to address this in a reasonable manner).
This can be address this by pinning the version of flate2 to 1.0.21 in your
own files. However, you should understand that this puts you in considerable
maintenance debt as you will no longer receive any updates for this dependency
and any package that requires a new version of the 1.0 series would be
incompatible with this requirement (cargo might yell at you very loudly).
_Breaking:_ Encoder types now have a generic parameter to differentiate BigTiff and standard Tiff encoding. Defaults to standard Tiff.
New features:
TiffError::UsageError variant.Int8 and Int16 (#114)
DecodingResult and DecodingBuffer have the two new variants I8 and I16.i32 arrays (#118)
DecodingResult and DecodingBuffer have a new I32 variant.Ifd and IfdBig tag types and I64 data type (#119)
DecodingResult and DecodingBuffer have a new I64 variant.SMinSampleValue and SMaxSampleValue (#123)Changes:
flate2. Aside from performance improvements and lower RAM consumption, this fixes a bug where max_uncompressed_length was precalculated for a single tile but then used as a hard limit on the whole data, failing to decompress any tiled images.
Deflate tag in addition to OldDeflate.InflateError, which is no longer needed with flate2 (#134)MinIsWhite is restricted to unsigned and floating
point values. This is expected to be be re-added once some contradictory
interpretation regarding semantics for signed values is resolved.Fixes:
Internal:
Support for reading u16 and ascii string tags.
New features:
u16 and ascii string tags.Limits::unlimited for disabling all limits.ImageEncoder::rows_per_strip to overwrite the default.Changes:
Fixes:
Inconsistent sizes encountered.Support for decoding BigTIFF with 64-bit offsets
New features:
f32, f64 are now recognizedImprovements:
weezl for performanceColorType trait now supports SAMPLE_ENCODING hintsFixes:
Nothing published for this version
Added support for 32-bit and 64-bit decoded values.
Several enumerations are now non_exhaustive for future extensions. These are Tag, Type, Value, PhotometricInterpretation, CompressionMethod, Predictor
Tag, Type, Value, PhotometricInterpretation,
CompressionMethod, Predictor.as is not guaranteed to be stable, except where documented explicitly.deflate compressed images.Limits customizable by exposing members.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 →