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