mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-06-30 18:03:07 +03:00
Merge pull request #8000 from radarhere/libtiff
This commit is contained in:
commit
1c21cd41bd
|
@ -242,7 +242,24 @@ class TestFileLibTiff(LibTiffTestCase):
|
||||||
|
|
||||||
im.save(out, tiffinfo=new_ifd)
|
im.save(out, tiffinfo=new_ifd)
|
||||||
|
|
||||||
def test_custom_metadata(self, tmp_path: Path) -> None:
|
@pytest.mark.parametrize(
|
||||||
|
"libtiff",
|
||||||
|
(
|
||||||
|
pytest.param(
|
||||||
|
True,
|
||||||
|
marks=pytest.mark.skipif(
|
||||||
|
not getattr(Image.core, "libtiff_support_custom_tags", False),
|
||||||
|
reason="Custom tags not supported by older libtiff",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
False,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
def test_custom_metadata(
|
||||||
|
self, monkeypatch: pytest.MonkeyPatch, tmp_path: Path, libtiff: bool
|
||||||
|
) -> None:
|
||||||
|
monkeypatch.setattr(TiffImagePlugin, "WRITE_LIBTIFF", libtiff)
|
||||||
|
|
||||||
class Tc(NamedTuple):
|
class Tc(NamedTuple):
|
||||||
value: Any
|
value: Any
|
||||||
type: int
|
type: int
|
||||||
|
@ -281,53 +298,43 @@ class TestFileLibTiff(LibTiffTestCase):
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
libtiffs = [False]
|
def check_tags(
|
||||||
if Image.core.libtiff_support_custom_tags:
|
tiffinfo: TiffImagePlugin.ImageFileDirectory_v2 | dict[int, str]
|
||||||
libtiffs.append(True)
|
) -> None:
|
||||||
|
im = hopper()
|
||||||
|
|
||||||
for libtiff in libtiffs:
|
out = str(tmp_path / "temp.tif")
|
||||||
TiffImagePlugin.WRITE_LIBTIFF = libtiff
|
im.save(out, tiffinfo=tiffinfo)
|
||||||
|
|
||||||
def check_tags(
|
with Image.open(out) as reloaded:
|
||||||
tiffinfo: TiffImagePlugin.ImageFileDirectory_v2 | dict[int, str]
|
for tag, value in tiffinfo.items():
|
||||||
) -> None:
|
reloaded_value = reloaded.tag_v2[tag]
|
||||||
im = hopper()
|
if (
|
||||||
|
isinstance(reloaded_value, TiffImagePlugin.IFDRational)
|
||||||
|
and libtiff
|
||||||
|
):
|
||||||
|
# libtiff does not support real RATIONALS
|
||||||
|
assert round(abs(float(reloaded_value) - float(value)), 7) == 0
|
||||||
|
continue
|
||||||
|
|
||||||
out = str(tmp_path / "temp.tif")
|
assert reloaded_value == value
|
||||||
im.save(out, tiffinfo=tiffinfo)
|
|
||||||
|
|
||||||
with Image.open(out) as reloaded:
|
# Test with types
|
||||||
for tag, value in tiffinfo.items():
|
ifd = TiffImagePlugin.ImageFileDirectory_v2()
|
||||||
reloaded_value = reloaded.tag_v2[tag]
|
for tag, tagdata in custom.items():
|
||||||
if (
|
ifd[tag] = tagdata.value
|
||||||
isinstance(reloaded_value, TiffImagePlugin.IFDRational)
|
ifd.tagtype[tag] = tagdata.type
|
||||||
and libtiff
|
check_tags(ifd)
|
||||||
):
|
|
||||||
# libtiff does not support real RATIONALS
|
|
||||||
assert (
|
|
||||||
round(abs(float(reloaded_value) - float(value)), 7) == 0
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
|
|
||||||
assert reloaded_value == value
|
# Test without types. This only works for some types, int for example are
|
||||||
|
# always encoded as LONG and not SIGNED_LONG.
|
||||||
# Test with types
|
check_tags(
|
||||||
ifd = TiffImagePlugin.ImageFileDirectory_v2()
|
{
|
||||||
for tag, tagdata in custom.items():
|
tag: tagdata.value
|
||||||
ifd[tag] = tagdata.value
|
for tag, tagdata in custom.items()
|
||||||
ifd.tagtype[tag] = tagdata.type
|
if tagdata.supported_by_default
|
||||||
check_tags(ifd)
|
}
|
||||||
|
)
|
||||||
# Test without types. This only works for some types, int for example are
|
|
||||||
# always encoded as LONG and not SIGNED_LONG.
|
|
||||||
check_tags(
|
|
||||||
{
|
|
||||||
tag: tagdata.value
|
|
||||||
for tag, tagdata in custom.items()
|
|
||||||
if tagdata.supported_by_default
|
|
||||||
}
|
|
||||||
)
|
|
||||||
TiffImagePlugin.WRITE_LIBTIFF = False
|
|
||||||
|
|
||||||
def test_osubfiletype(self, tmp_path: Path) -> None:
|
def test_osubfiletype(self, tmp_path: Path) -> None:
|
||||||
outfile = str(tmp_path / "temp.tif")
|
outfile = str(tmp_path / "temp.tif")
|
||||||
|
@ -741,7 +748,7 @@ class TestFileLibTiff(LibTiffTestCase):
|
||||||
pytest.param(
|
pytest.param(
|
||||||
True,
|
True,
|
||||||
marks=pytest.mark.skipif(
|
marks=pytest.mark.skipif(
|
||||||
not Image.core.libtiff_support_custom_tags,
|
not getattr(Image.core, "libtiff_support_custom_tags", False),
|
||||||
reason="Custom tags not supported by older libtiff",
|
reason="Custom tags not supported by older libtiff",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in New Issue
Block a user