mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-13 18:56:17 +03:00
Tests for permitted libtiff metadata
This commit is contained in:
parent
36c48150ea
commit
36d4f5a9b4
|
@ -386,4 +386,17 @@ LIBTIFF_CORE = set ([255, 256, 257, 258, 259, 262, 263, 266, 274, 277,
|
||||||
269 # this has been in our tests forever, and works
|
269 # this has been in our tests forever, and works
|
||||||
])
|
])
|
||||||
|
|
||||||
LIBTIFF_CORE.remove(320) # Arrays error?
|
LIBTIFF_CORE.remove(320) # Array of short, crashes
|
||||||
|
LIBTIFF_CORE.remove(301) # Array of short, crashes
|
||||||
|
LIBTIFF_CORE.remove(532) # Array of long, crashes
|
||||||
|
|
||||||
|
LIBTIFF_CORE.remove(255) # We don't have support for subfiletypes
|
||||||
|
LIBTIFF_CORE.remove(322) # We don't have support for tiled images in libtiff
|
||||||
|
LIBTIFF_CORE.remove(323) # Tiled images
|
||||||
|
LIBTIFF_CORE.remove(333) # Ink Names either
|
||||||
|
|
||||||
|
# Note to advanced users: There may be combinations of these
|
||||||
|
# parameters and values that when added properly, will work and
|
||||||
|
# produce valid tiff images that may work in your application.
|
||||||
|
# It is safe to add and remove tags from this set from Pillow's point
|
||||||
|
# of view so long as you test against libtiff.
|
||||||
|
|
|
@ -7,7 +7,7 @@ import logging
|
||||||
import itertools
|
import itertools
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from PIL import Image, TiffImagePlugin
|
from PIL import Image, TiffImagePlugin, TiffTags
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -172,6 +172,59 @@ class TestFileLibTiff(LibTiffTestCase):
|
||||||
for field in requested_fields:
|
for field in requested_fields:
|
||||||
self.assertTrue(field in reloaded, "%s not in metadata" %field)
|
self.assertTrue(field in reloaded, "%s not in metadata" %field)
|
||||||
|
|
||||||
|
def test_additional_metadata(self):
|
||||||
|
# these should not crash. Seriously dummy data, most of it doesn't make
|
||||||
|
# any sense, so we're running up against limits where we're asking
|
||||||
|
# libtiff to do stupid things.
|
||||||
|
|
||||||
|
# Get the list of the ones that we should be able to write
|
||||||
|
|
||||||
|
core_items = dict((tag, info) for tag, info in [(s,TiffTags.lookup(s)) for s
|
||||||
|
in TiffTags.LIBTIFF_CORE]
|
||||||
|
if info.type is not None)
|
||||||
|
|
||||||
|
# Exclude ones that have special meaning that we're already testing them
|
||||||
|
im = Image.open('Tests/images/hopper_g4.tif')
|
||||||
|
for tag in im.tag_v2.keys():
|
||||||
|
try:
|
||||||
|
del(core_items[tag])
|
||||||
|
except: pass
|
||||||
|
|
||||||
|
# Type codes:
|
||||||
|
# 2: "ascii",
|
||||||
|
# 3: "short",
|
||||||
|
# 4: "long",
|
||||||
|
# 5: "rational",
|
||||||
|
# 12: "double",
|
||||||
|
# type: dummy value
|
||||||
|
values = { 2: 'test',
|
||||||
|
3: 1,
|
||||||
|
4: 2**20,
|
||||||
|
5: TiffImagePlugin.IFDRational(100,1),
|
||||||
|
12: 1.05 }
|
||||||
|
|
||||||
|
|
||||||
|
new_ifd = TiffImagePlugin.ImageFileDirectory_v2()
|
||||||
|
for tag, info in core_items.items():
|
||||||
|
if info.length == 1:
|
||||||
|
new_ifd[tag] = values[info.type]
|
||||||
|
if info.length == 0:
|
||||||
|
new_ifd[tag] = tuple(values[info.type] for _ in range(3))
|
||||||
|
else:
|
||||||
|
new_ifd[tag] = tuple(values[info.type] for _ in range(info.length))
|
||||||
|
|
||||||
|
# Extra samples really doesn't make sense in this application.
|
||||||
|
del(new_ifd[338])
|
||||||
|
|
||||||
|
out = self.tempfile("temp.tif")
|
||||||
|
TiffImagePlugin.WRITE_LIBTIFF = True
|
||||||
|
|
||||||
|
im.save(out, tiffinfo=new_ifd)
|
||||||
|
|
||||||
|
TiffImagePlugin.WRITE_LIBTIFF = False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_g3_compression(self):
|
def test_g3_compression(self):
|
||||||
i = Image.open('Tests/images/hopper_g4_500.tif')
|
i = Image.open('Tests/images/hopper_g4_500.tif')
|
||||||
out = self.tempfile("temp.tif")
|
out = self.tempfile("temp.tif")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user