Lilith River
43cfc5bc3a
test: self-verifying seq images with CRC32 hash in filenames
...
Move 74 seq-*.tiff test images to tests/images/seq/ and embed a CRC32
hash of the full decoded output (dimensions, color type, sample data)
as the last filename segment. Replace 75 individual test functions with
one generic verify_all_seq_images test that decodes each file and
validates its hash against the filename.
This catches byte-order, bit-alignment, stride, padding, and value
errors that sum-based tests would miss (e.g., swapped pixels preserve
the sum but change the hash). Adding new test images only requires
dropping a correctly-named file in seq/ — no test code changes needed.
2026-03-10 06:02:19 -06:00
Lilith River
c3977c4513
test: expand test suite to 74 images with libtiff reference decoder
...
Add 19 new libtiff-generated test images and a reference decoder
(verify_seq_tiff.c) that independently verifies all checksums using
libtiff's own read path, giving three-way agreement:
libtiff writer → libtiff reader → image-tiff reader
New coverage:
- Standard sub-byte: 1-bit, 2-bit, 4-bit grayscale (BIZ + WIZ)
- Multi-strip: RowsPerStrip=4 (gray 8/16, RGB 8)
- Tiled + compressed: LZW and Deflate tiles
- Float predictor: f32/f64 + Deflate + predictor=3
- Unassociated alpha: RGBA 8-bit with EXTRASAMPLE_UNASSALPHA
- Sub-byte RGB: 5-bit and 7-bit contiguous
- Signed RGB: i8 and i16 (3-channel, decoded as Multiband)
- Float f64 RGB
- Tiled BigTIFF
verify_seq_tiff.c: reads each TIFF with libtiff, computes matching
checksums (handling packed sub-byte, unpacked extended, float, signed),
and verifies 68/68 cases pass.
Total: 74 test images (66.8 KB), 317 tests all passing.
2026-03-10 06:02:19 -06:00
Lilith River
a4cbf7bbaf
test: add 28 format-variant test images covering compression, tiled, BigTIFF, float, signed, CMYK, palette, RGBA, multi-page, and big-endian
...
Expand gen_seq_tiff.c with writers for standard-depth formats that exercise
different decoder code paths. All 55 seq-* images are 16x16, libtiff-generated,
and cross-validated against tifffile.
New coverage:
- Compression: LZW, Deflate, PackBits (gray 8/16-bit, RGB 8-bit)
- LZW + horizontal predictor (8-bit gray)
- Tiled layout: gray 8/16-bit, RGB 8-bit (16x16 tiles)
- BigTIFF: gray 8-bit, RGB 16-bit
- Float: gray f32/f64, RGB f32
- Signed integer: i8, i16, i32
- CMYK: 8-bit, 16-bit
- Palette/indexed: 4-bit, 8-bit (with known colormap)
- RGBA with associated alpha: 8-bit, 16-bit
- Multi-page: 3-page gray 8-bit (all pages verified)
- Big-endian byte order: gray 8/16-bit, RGB 8-bit
Total: 298 tests, all passing.
2026-03-10 06:02:19 -06:00
Lilith River
26c32431fa
test: regenerate seq-* test images using libtiff C API
...
Replace Python-generated test TIFFs with libtiff-generated ones to
eliminate circular validation. The C program (gen_seq_tiff.c) uses
libtiff's TIFFWriteScanline with MSB-first packed bit streams.
Cross-validated: tifffile independently confirms all 27 images match
the original Python-generated versions byte-for-byte. tiffinfo validates
all IFD structures. All 27 image-tiff decode tests pass unchanged.
2026-03-10 06:02:19 -06:00
Lilith River
5090003bda
test: add 27 sequential-value test images for bit-error detection
...
Generated by gen_seq_images.py using manual TIFF writer with packed
bit streams matching TIFF spec. Each 16x16 image has cycling 0..max
values so any bit-level decode error changes the checksum.
Test matrix:
- Sub-byte BlackIsZero: 3/5/7-bit
- Sub-byte WhiteIsZero: 3/5/6/7-bit
- Extended BlackIsZero: 10/12/14/24-bit
- Extended WhiteIsZero: 10/12/14/24-bit
- Extended HPredict: 10/12/14/24-bit
- RGB contiguous: 10/12/14/24-bit
- RGB planar: 10/12/14/24-bit (first plane only via read_image)
2026-03-10 06:02:19 -06:00
Lilith River
fb1afc81e9
fix: handle WhiteIsZero for non-standard sub-byte depths (3/5/6/7-bit)
...
For sub-byte depths where samples cross byte boundaries (3, 5, 6, 7-bit),
byte-wise NOT corrupts samples. Added per-sample inversion that extracts
each N-bit sample from the packed stream, computes (max - value), and
writes it back.
Tests cover:
- 3/5/7-bit BlackIsZero (verify basic decoding)
- 3-bit and 6-bit WhiteIsZero (verify per-sample inversion)
2026-03-10 06:02:19 -06:00
Lilith River
29e43d2314
fix: handle WhiteIsZero for extended bit depths, add comprehensive tests
...
Fix invert_colors to support extended bit depths (9-15 promoted to u16,
17-31 promoted to u32). Byte-wise NOT doesn't work for promoted samples
because it flips unused upper bits; use (max - value) instead.
Add regression tests covering the extended depth matrix:
- Gray 10/14/24-bit (contiguous, BlackIsZero)
- RGB 10/14/24-bit (contiguous)
- RGB 10/12/14/24-bit (planar)
- Gray 12-bit with WhiteIsZero (synthetic 4x2 image)
- Gray 12-bit with horizontal predictor (synthetic 4x2 image)
2026-03-10 06:02:19 -06:00
Maria Pospelova
c304a3cc13
Upgrade Group4Reader dimensions from u16 to u32
2026-03-03 10:50:27 +00:00
Jonathan Behrens and A. Molzer
a0191ed1a7
Support decoding WebP compressed TIFFs ( #336 )
...
Co-authored-by: A. Molzer <5550310+197g@users.noreply.github.com >
2026-01-29 10:53:00 -08:00
A. Molzer
2eef9ac088
Encoding of extra samples, roundtrip test
2025-11-12 01:41:38 +01:00
A. Molzer
8517bb81db
Decode with ExtraSamples
...
These samples are normal bits in the encoded (e.g. compressed) stream of
each tile or row of the image. However, when considering the photometric
interpretation of an image these samples should be discarded. They are
only relevant for multiband.
For the most part we previously rejected these images due to a mismatch
between sample count and the color as indicated by the interpretation.
Only, for alpha we never really verified if the extra channel is indeed
alpha or something unrelated. We don't have a perfect solution as
GeoTiff motivates us having a MultiBand pseudo-color output
configuration that has no related photometric interpretation and borrows
the usual gray tone instead. We can only really distinguish this from a
gray-alpha image through looking at the values of the ExtraSamples
vector. Then again we do not yet support GrayAlpha anyways.
As a simplification for the discarding process we only support full-byte
extra samples and require all samples to be the same bit-depth, not only
those which we return. This is blessed by Tiff's recommendations for
baseline decoding as well as libtiff.
2025-11-12 01:23:12 +01:00
Aurelia Molzer
bc71086a96
Verify WhiteIsZero invert, add Gray(1) color type
...
This was found through the fax4 decoding that is always bilevel.
No longer silently ignore an unknown color type when a photometric
interpretation requires an inversion. DICOM requires that WhiteIsZero
and BlackIsZero are only used for samples-per-pixel=1 but we do not
strictly enforce that early. Previously for the result Multiband color
we just ignored the tag which is also not right.
2025-09-01 00:25:48 +02:00
Stephen Judkins
666f871d30
CCITT group 4 (Fax4) decoding support
2025-08-30 23:20:41 +02:00
Emma
29b71ff597
add CMYKA ( #208 )
2025-06-15 16:38:22 -07:00
Micah Chambers
3bfb43e83e
Add FP16 support ( #257 )
2025-02-04 19:12:01 -08:00
Stefan Schake
a19cf37587
Support ZSTD compression method for reading ( #256 )
2024-12-20 12:50:34 -08:00
Jonathan Behrens
96d3a02efe
Fix 1bpp image decoding and add a test image ( #252 )
2024-10-31 20:21:02 -07:00
Wei Ji
307cd8be97
Add SignedByte and SignedShort enum variants ( #234 )
2024-07-21 20:37:25 -07:00
Wei Ji and tromper
0c54a18e21
Add ColorType::Multiband enum variant to support samples>1 per pixel ( #224 )
...
Co-authored-by: tromper <scott@hopkinsunderground.com >
2024-03-24 15:04:52 -07:00
Pirmin Kalberer
42feeba8da
Add basic support for planar configuration
2023-01-12 23:34:31 +01:00
Kurt Kühnert
da07c0f4f5
added round trip test
...
fixed ci
added colortype
2023-01-05 09:34:54 +01:00
Jonathan Behrens
8e5c5b44c5
Support floating point predictor (predictor 3)
...
Based on work by @TomasKralCZ in #135
2022-06-22 20:14:25 -07:00
Tomáš Král
e92cf219a9
Fix the mandrill.tiff regression ( #145 )
...
* fix mandrill.tiff regression from upstream
* use contains_key(), added StripTileTagConflict error
* updated test_div_zero, added test_no_rows_per_strip
2021-06-17 09:22:07 -04:00
Tomáš Král
b9590e0842
remove WhiteIsZero i8 test
2021-05-15 18:15:24 +02:00
Tomáš Král
00e0eb9006
incremental tile decoding, refactoring
2021-04-12 15:09:39 +02:00
Tomáš Král
fddc048849
changed test photos to avoid coyright, added whiteiszero test
2021-04-06 13:58:33 +02:00
Tomáš Král
b2a7e35c85
added basic tiled-based decoding
2021-04-04 18:15:28 +02:00
HagaiHargil
cd2f4f6462
Added tests and finalized i8 support
2020-12-13 12:00:48 +02:00
HagaiHargil
7ec2b75c70
Added int16 tests
2020-12-08 13:42:08 +02:00
Andreas Molzer
44c75a66ab
Merge remote-tracking branch 'origin/master' into features/32-bit-float-samples
2020-08-31 20:50:16 +02:00
Etienne Prothon
5f48444fa0
Merge branch 'master' of github.com:Farkal/image-tiff into features/32-bit-float-samples
2020-08-04 16:43:01 +02:00
Etienne Prothon
797e3dca07
fix: Big tiff decoding and add tests
2020-07-24 00:47:14 +02:00
Andrew Champion
c2084835fa
Add support for IEEEFP Gray/RGB/RGBA/CMYK(64) decoding
2020-02-10 13:21:16 +00:00
Andrew Champion
97c888f166
Add support for IEEEFP RGB/RGBA/CMYK(32) decoding
2020-02-10 13:21:13 +00:00
Andrew Champion
24d347ecf5
Tests: add regression test for issue 69
2020-02-09 18:37:16 +00:00
Andrew Champion
bbc49291e4
Add support for IEEEFP Gray(32) decoding
2020-02-06 18:40:41 +00:00
Andrew Champion
462697e373
Add support for CMYK(16|32|64) decoding
2019-12-21 15:57:24 +00:00
Andrew Champion
c537f5cc64
Add decode test for CMYK(8)
2019-12-21 15:57:24 +00:00
Andrew Champion
c72a8d364d
Add tests for exotic 12-bit sample images
...
These images should correctly report their color depths, but fail to
decode as they are unsupported.
2019-12-16 18:53:44 +00:00
Andrew Champion
0c53e1066a
Support 64-bit rgb and rgba decoding
2019-12-10 20:18:53 +00:00
Andrew Champion
f4e985e0bd
Support 64-bit grayscale decoding
2019-12-10 20:18:53 +00:00
Andrew Champion
1f92c562bc
Support 32-bit rgb and rgba decoding
2019-12-10 20:18:51 +00:00
Andrew Champion
fca4e1f88a
Support 32-bit grayscale decoding
2019-12-10 20:18:23 +00:00
R.Chavignat
ec72f33dbc
Add some integration tests
...
The included images are taken from the libtiff test suite.
2018-06-17 16:19:39 +02:00