Support ZSTD compression method for reading (#256)

This commit is contained in:
Stefan Schake authored and GitHub committed 2024-12-20 12:50:34 -08:00
1 parent ff52aea06e
commit a19cf37587
6 files changed
+20 -1

No files matched your search

+4
View File
@@ -20,10 +20,14 @@ exclude = ["tests/images/*", "tests/fuzz_images/*"]
weezl = "0.1.0" weezl = "0.1.0"
jpeg = { package = "jpeg-decoder", version = "0.3.0", default-features = false } jpeg = { package = "jpeg-decoder", version = "0.3.0", default-features = false }
flate2 = "1.0.20" flate2 = "1.0.20"
zstd = { version = "0.13", optional = true }
[dev-dependencies] [dev-dependencies]
criterion = "0.3.1" criterion = "0.3.1"
[features]
zstd = ["dep:zstd"]
[[bench]] [[bench]]
name = "lzw" name = "lzw"
harness = false harness = false
+1
View File
@@ -36,6 +36,7 @@ This table lists photometric interpretations and sample formats which are suppor
| Deflate | ✓ | ✓ | | Deflate | ✓ | ✓ |
| PackBits | ✓ | ✓ | | PackBits | ✓ | ✓ |
| JPEG | ✓ | not yet | | JPEG | ✓ | not yet |
| ZSTD | ✓ | not yet |
## Not yet supported ## Not yet supported
+5 -1
View File
@@ -378,7 +378,11 @@ impl Image {
CompressionMethod::None => Box::new(reader), CompressionMethod::None => Box::new(reader),
CompressionMethod::LZW => { CompressionMethod::LZW => {
Box::new(LZWReader::new(reader, usize::try_from(compressed_length)?)) Box::new(LZWReader::new(reader, usize::try_from(compressed_length)?))
} },
#[cfg(feature = "zstd")]
CompressionMethod::ZSTD => {
Box::new(zstd::Decoder::new(reader)?)
},
CompressionMethod::PackBits => Box::new(PackBitsReader::new(reader, compressed_length)), CompressionMethod::PackBits => Box::new(PackBitsReader::new(reader, compressed_length)),
CompressionMethod::Deflate | CompressionMethod::OldDeflate => { CompressionMethod::Deflate | CompressionMethod::OldDeflate => {
Box::new(DeflateReader::new(reader)) Box::new(DeflateReader::new(reader))
+3
View File
@@ -184,6 +184,9 @@ pub enum CompressionMethod(u16) unknown("A custom compression method") {
Deflate = 8, Deflate = 8,
OldDeflate = 0x80B2, OldDeflate = 0x80B2,
PackBits = 0x8005, PackBits = 0x8005,
// Self-assigned by libtiff
ZSTD = 0xC350,
} }
} }
+7
View File
@@ -515,3 +515,10 @@ fn test_predictor_3_rgb_f32() {
fn test_predictor_3_gray_f32() { fn test_predictor_3_gray_f32() {
test_image_sum_f32("predictor-3-gray-f32.tif", ColorType::Gray(32), 20008.275); test_image_sum_f32("predictor-3-gray-f32.tif", ColorType::Gray(32), 20008.275);
} }
#[test]
#[cfg(feature = "zstd")]
fn test_zstd_compression() {
// gdal_translate -co COMPRESS=ZSTD -co ZSTD_LEVEL=20 int16.tif int16_zstd.tif
test_image_sum_i16("int16_zstd.tif", ColorType::Gray(16), 354396);
}
Binary file not shown.