mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 01:16:16 +03:00
Added custom string TIFF tags
This commit is contained in:
parent
952de2ec4c
commit
6ead422e91
|
@ -235,7 +235,10 @@ class TestFileLibTiff(LibTiffTestCase):
|
||||||
def test_custom_metadata(self):
|
def test_custom_metadata(self):
|
||||||
custom = {
|
custom = {
|
||||||
37000: 4,
|
37000: 4,
|
||||||
37001: 4.2
|
37001: 4.2,
|
||||||
|
37002: 'custom tag value',
|
||||||
|
37003: u'custom tag value',
|
||||||
|
37004: b'custom tag value'
|
||||||
}
|
}
|
||||||
|
|
||||||
libtiff_version = TiffImagePlugin._libtiff_version()
|
libtiff_version = TiffImagePlugin._libtiff_version()
|
||||||
|
@ -256,6 +259,8 @@ class TestFileLibTiff(LibTiffTestCase):
|
||||||
|
|
||||||
reloaded = Image.open(out)
|
reloaded = Image.open(out)
|
||||||
for tag, value in custom.items():
|
for tag, value in custom.items():
|
||||||
|
if libtiff and isinstance(value, bytes):
|
||||||
|
value = value.decode()
|
||||||
self.assertEqual(reloaded.tag_v2[tag], value)
|
self.assertEqual(reloaded.tag_v2[tag], value)
|
||||||
|
|
||||||
def test_int_dpi(self):
|
def test_int_dpi(self):
|
||||||
|
|
|
@ -1519,12 +1519,16 @@ def _save(im, fp, filename):
|
||||||
getattr(im, 'tag_v2', {}).items(),
|
getattr(im, 'tag_v2', {}).items(),
|
||||||
legacy_ifd.items()):
|
legacy_ifd.items()):
|
||||||
# Libtiff can only process certain core items without adding
|
# Libtiff can only process certain core items without adding
|
||||||
# them to the custom dictionary. Support has only been been added
|
# them to the custom dictionary.
|
||||||
# for int and float values
|
# Support for custom items has only been been added
|
||||||
|
# for int, float, unicode, string and byte values
|
||||||
if tag not in TiffTags.LIBTIFF_CORE:
|
if tag not in TiffTags.LIBTIFF_CORE:
|
||||||
|
if TiffTags.lookup(tag).type == TiffTags.UNDEFINED:
|
||||||
|
continue
|
||||||
if (distutils.version.StrictVersion(_libtiff_version()) <
|
if (distutils.version.StrictVersion(_libtiff_version()) <
|
||||||
distutils.version.StrictVersion("4.0")) \
|
distutils.version.StrictVersion("4.0")) \
|
||||||
or not (isinstance(value, int) or isinstance(value, float)):
|
or not (isinstance(value, (int, float, str, bytes)) or
|
||||||
|
(not py3 and isinstance(value, unicode))): # noqa: F821
|
||||||
continue
|
continue
|
||||||
if tag not in atts and tag not in blocklist:
|
if tag not in atts and tag not in blocklist:
|
||||||
if isinstance(value, str if py3 else unicode): # noqa: F821
|
if isinstance(value, str if py3 else unicode): # noqa: F821
|
||||||
|
|
|
@ -885,9 +885,11 @@ PyImaging_LibTiffEncoderNew(PyObject* self, PyObject* args)
|
||||||
}
|
}
|
||||||
} else if (PyBytes_Check(value)) {
|
} else if (PyBytes_Check(value)) {
|
||||||
TRACE(("Setting from Bytes: %d, %s \n", key_int, PyBytes_AsString(value)));
|
TRACE(("Setting from Bytes: %d, %s \n", key_int, PyBytes_AsString(value)));
|
||||||
status = ImagingLibTiffSetField(&encoder->state,
|
if (is_core_tag || !ImagingLibTiffMergeFieldInfo(&encoder->state, TIFF_ASCII, key_int)) {
|
||||||
(ttag_t) PyInt_AsLong(key),
|
status = ImagingLibTiffSetField(&encoder->state,
|
||||||
PyBytes_AsString(value));
|
(ttag_t) PyInt_AsLong(key),
|
||||||
|
PyBytes_AsString(value));
|
||||||
|
}
|
||||||
} else if (PyTuple_Check(value)) {
|
} else if (PyTuple_Check(value)) {
|
||||||
Py_ssize_t len,i;
|
Py_ssize_t len,i;
|
||||||
float *floatav;
|
float *floatav;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user