image-rs/image-tiff

TIFF decoding and encoding library in pure Rust

Rust

167

758 commits

updated Sep 6, 2026

See the code

README

image-tiff

Build Status Documentation Further crate info

TIFF decoding and encoding library in pure Rust

Supported

Features

  • Baseline spec (other than formats and tags listed below as not supported)
  • Multipage
  • BigTIFF
  • Incremental decoding

Formats

This table lists photometric interpretations and sample formats which are supported for encoding and decoding. The entries are ColorType variants for which sample bit depths are supported. Only samples where all bit depths are equal are currently supported. For example, RGB(8) means that the bit depth [8, 8, 8] is supported and will be interpreted as an 8 bit per channel RGB color type.

PhotometricInterpretationUINT FormatIEEEFP Format
WhiteIsZeroGray(8|16|32|64)Gray(32|64)
BlackIsZeroGray(8|16|32|64)Gray(32|64)
RGBRGB(8|16|32|64), RGBA(8|16|32|64)RGB(32|64), RGBA(32|64)
RGBPalette
Mask
CMYKCMYK(8|16|32|64)CMYK(32|64)
CMYKACMYKA(8)
YCbCr
CIELab

Compressions

DecodingEncoding
None✓✓
LZW✓✓
Deflate✓✓
PackBits✓✓
Fax4✓not yet
JPEG✓not yet
ZSTD✓not yet

Not yet supported

Formats and interpretations not listed above or with empty entries are unsupported.

  • Baseline tags
    • ExtraSamples
  • Extension tags

Fuzzing

This crate uses cargo-fuzz in order to test the image parser.

After installing it with cargo install cargo-fuzz on a nightly rustc, the fuzzing harness can be run with recommended settings using cargo fuzz run decode_comprehensive -snone -- -dict=fuzz/tiff.dict -timeout=5.

image-rs/image-tiff

TIFF decoding and encoding library in pure Rust

Rust

167

758 commits

updated Sep 6, 2026

See the code

README

image-tiff

Build Status Documentation Further crate info

TIFF decoding and encoding library in pure Rust

Supported

Features

  • Baseline spec (other than formats and tags listed below as not supported)
  • Multipage
  • BigTIFF
  • Incremental decoding

Formats

This table lists photometric interpretations and sample formats which are supported for encoding and decoding. The entries are ColorType variants for which sample bit depths are supported. Only samples where all bit depths are equal are currently supported. For example, RGB(8) means that the bit depth [8, 8, 8] is supported and will be interpreted as an 8 bit per channel RGB color type.

PhotometricInterpretationUINT FormatIEEEFP Format
WhiteIsZeroGray(8|16|32|64)Gray(32|64)
BlackIsZeroGray(8|16|32|64)Gray(32|64)
RGBRGB(8|16|32|64), RGBA(8|16|32|64)RGB(32|64), RGBA(32|64)
RGBPalette
Mask
CMYKCMYK(8|16|32|64)CMYK(32|64)
CMYKACMYKA(8)
YCbCr
CIELab

Compressions

DecodingEncoding
None✓✓
LZW✓✓
Deflate✓✓
PackBits✓✓
Fax4✓not yet
JPEG✓not yet
ZSTD✓not yet

Not yet supported

Formats and interpretations not listed above or with empty entries are unsupported.

  • Baseline tags
    • ExtraSamples
  • Extension tags

Fuzzing

This crate uses cargo-fuzz in order to test the image parser.

After installing it with cargo install cargo-fuzz on a nightly rustc, the fuzzing harness can be run with recommended settings using cargo fuzz run decode_comprehensive -snone -- -dict=fuzz/tiff.dict -timeout=5.

Project health

Overall

6.3/10

Maintained

10/10

Code review

8/10
OpenSSF Scorecard

Significant stargazers

Christoph Gohlke

885 followers · starred Jul 2024

Frank Elsinga

186 followers · starred Feb 2026

Alexander A.

41 followers · starred Aug 2024

Gordon P. Hemsley

76 followers · starred Nov 2018