diff --git a/rasterio_generated/fixtures/uint16_1band_lzw_block128_predictor2.tif b/rasterio_generated/fixtures/uint16_1band_lzw_block128_predictor2.tif index 2916c1e..8f1396d 100644 Binary files a/rasterio_generated/fixtures/uint16_1band_lzw_block128_predictor2.tif and b/rasterio_generated/fixtures/uint16_1band_lzw_block128_predictor2.tif differ diff --git a/rasterio_generated/fixtures/uint16_1band_lzw_block128_predictor2_info.md b/rasterio_generated/fixtures/uint16_1band_lzw_block128_predictor2_info.md index 04e8258..51da43b 100644 --- a/rasterio_generated/fixtures/uint16_1band_lzw_block128_predictor2_info.md +++ b/rasterio_generated/fixtures/uint16_1band_lzw_block128_predictor2_info.md @@ -36,6 +36,7 @@ Image Structure COMPRESSION: LZW INTERLEAVE: BAND OVERVIEW_RESAMPLING: BILINEAR + PREDICTOR: 2 Band 1 ColorInterp: gray diff --git a/rasterio_generated/fixtures/uint16_1band_scale_offset.tif b/rasterio_generated/fixtures/uint16_1band_scale_offset.tif index ad0c394..a7b58e0 100644 Binary files a/rasterio_generated/fixtures/uint16_1band_scale_offset.tif and b/rasterio_generated/fixtures/uint16_1band_scale_offset.tif differ diff --git a/rasterio_generated/fixtures/uint16_1band_scale_offset_info.md b/rasterio_generated/fixtures/uint16_1band_scale_offset_info.md index 2262855..ab49d50 100644 --- a/rasterio_generated/fixtures/uint16_1band_scale_offset_info.md +++ b/rasterio_generated/fixtures/uint16_1band_scale_offset_info.md @@ -36,6 +36,7 @@ Image Structure COMPRESSION: DEFLATE INTERLEAVE: BAND OVERVIEW_RESAMPLING: BILINEAR + PREDICTOR: 2 Band 1 ColorInterp: gray diff --git a/rasterio_generated/fixtures/uint8_1band_deflate_block128_unaligned_predictor2.tif b/rasterio_generated/fixtures/uint8_1band_deflate_block128_unaligned_predictor2.tif index 8183855..22988ab 100644 Binary files a/rasterio_generated/fixtures/uint8_1band_deflate_block128_unaligned_predictor2.tif and b/rasterio_generated/fixtures/uint8_1band_deflate_block128_unaligned_predictor2.tif differ diff --git a/rasterio_generated/fixtures/uint8_1band_deflate_block128_unaligned_predictor2_info.md b/rasterio_generated/fixtures/uint8_1band_deflate_block128_unaligned_predictor2_info.md index 5762591..395d82f 100644 --- a/rasterio_generated/fixtures/uint8_1band_deflate_block128_unaligned_predictor2_info.md +++ b/rasterio_generated/fixtures/uint8_1band_deflate_block128_unaligned_predictor2_info.md @@ -36,6 +36,7 @@ Image Structure COMPRESSION: DEFLATE INTERLEAVE: BAND OVERVIEW_RESAMPLING: BILINEAR + PREDICTOR: 2 Band 1 ColorInterp: gray diff --git a/rasterio_generated/fixtures/uint8_1band_lzw_block64_predictor2.tif b/rasterio_generated/fixtures/uint8_1band_lzw_block64_predictor2.tif index 811eb4e..6002056 100644 Binary files a/rasterio_generated/fixtures/uint8_1band_lzw_block64_predictor2.tif and b/rasterio_generated/fixtures/uint8_1band_lzw_block64_predictor2.tif differ diff --git a/rasterio_generated/fixtures/uint8_1band_lzw_block64_predictor2_info.md b/rasterio_generated/fixtures/uint8_1band_lzw_block64_predictor2_info.md index b553985..5c7ed8a 100644 --- a/rasterio_generated/fixtures/uint8_1band_lzw_block64_predictor2_info.md +++ b/rasterio_generated/fixtures/uint8_1band_lzw_block64_predictor2_info.md @@ -36,6 +36,7 @@ Image Structure COMPRESSION: LZW INTERLEAVE: BAND OVERVIEW_RESAMPLING: BILINEAR + PREDICTOR: 2 Band 1 ColorInterp: gray diff --git a/rasterio_generated/write_utils.py b/rasterio_generated/write_utils.py index 30f01ca..49691e6 100644 --- a/rasterio_generated/write_utils.py +++ b/rasterio_generated/write_utils.py @@ -101,9 +101,6 @@ def write_cog( "transform": transform, } - if predictor is not None: - src_profile["predictor"] = predictor - if nodata is not None: src_profile["nodata"] = nodata @@ -169,5 +166,8 @@ def write_cog( if compress_level is not None: cog_profile["level"] = compress_level + if predictor is not None: + cog_profile["predictor"] = predictor + # Copy to output path copy(mem, path, copy_src_overviews=True, **cog_profile) diff --git a/tests/test_predictor.py b/tests/test_predictor.py new file mode 100644 index 0000000..e79b226 --- /dev/null +++ b/tests/test_predictor.py @@ -0,0 +1,26 @@ +"""Check that fixtures generated with a predictor carry it on every IFD. + +write_cog once set the predictor on its in-memory dataset only, so the COGs it +wrote silently used no predictor. +""" + +from pathlib import Path + +import pytest +import tifffile + +FIXTURES_DIR = Path(__file__).parent.parent / "rasterio_generated" / "fixtures" + + +@pytest.mark.parametrize( + "name", + [ + "uint16_1band_lzw_block128_predictor2", + "uint16_1band_scale_offset", + "uint8_1band_deflate_block128_unaligned_predictor2", + "uint8_1band_lzw_block64_predictor2", + ], +) +def test_predictor_2(name: str): + with tifffile.TiffFile(FIXTURES_DIR / f"{name}.tif") as tif: + assert [int(page.predictor) for page in tif.pages] == [2] * len(tif.pages)