mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-10-27 22:21:33 +03:00
Merge 82cdaa456c into e36e67081a
This commit is contained in:
commit
650dfd2850
|
|
@ -355,6 +355,35 @@ class TestFileLibTiff(LibTiffTestCase):
|
|||
# Should not segfault
|
||||
im.save(outfile)
|
||||
|
||||
@pytest.mark.parametrize("tagtype", (TiffTags.SIGNED_RATIONAL, TiffTags.IFD))
|
||||
def test_tag_type(
|
||||
self, tagtype: int, monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
||||
) -> None:
|
||||
monkeypatch.setattr(TiffImagePlugin, "WRITE_LIBTIFF", True)
|
||||
|
||||
ifd = TiffImagePlugin.ImageFileDirectory_v2()
|
||||
ifd[37000] = 100
|
||||
ifd.tagtype[37000] = tagtype
|
||||
|
||||
out = tmp_path / "temp.tif"
|
||||
im = Image.new("L", (1, 1))
|
||||
im.save(out, tiffinfo=ifd)
|
||||
|
||||
with Image.open(out) as reloaded:
|
||||
assert reloaded.tag_v2[37000] == 100
|
||||
|
||||
def test_inknames_tag(
|
||||
self, monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
||||
) -> None:
|
||||
monkeypatch.setattr(TiffImagePlugin, "WRITE_LIBTIFF", True)
|
||||
|
||||
out = tmp_path / "temp.tif"
|
||||
hopper("L").save(out, tiffinfo={333: "name\x00"})
|
||||
|
||||
with Image.open(out) as reloaded:
|
||||
assert isinstance(reloaded, TiffImagePlugin.TiffImageFile)
|
||||
assert reloaded.tag_v2[333] in ("name", "name\x00")
|
||||
|
||||
def test_whitepoint_tag(
|
||||
self, monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
||||
) -> None:
|
||||
|
|
|
|||
|
|
@ -558,7 +558,6 @@ LIBTIFF_CORE = {
|
|||
LIBTIFF_CORE.remove(255) # We don't have support for subfiletypes
|
||||
LIBTIFF_CORE.remove(322) # We don't have support for writing tiled images with 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
|
||||
|
|
|
|||
20
src/encode.c
20
src/encode.c
|
|
@ -668,10 +668,10 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) {
|
|||
int key_int, status, is_core_tag, is_var_length, num_core_tags, i;
|
||||
TIFFDataType type = TIFF_NOTYPE;
|
||||
// This list also exists in TiffTags.py
|
||||
const int core_tags[] = {256, 257, 258, 259, 262, 263, 266, 269, 274,
|
||||
277, 278, 280, 281, 340, 341, 282, 283, 284,
|
||||
286, 287, 296, 297, 320, 321, 338, 32995, 32998,
|
||||
32996, 339, 32997, 330, 531, 530, 65537, 301, 532};
|
||||
const int core_tags[] = {256, 257, 258, 259, 262, 263, 266, 269, 274, 277,
|
||||
278, 280, 281, 282, 283, 284, 286, 287, 296, 297,
|
||||
301, 320, 321, 330, 333, 338, 339, 340, 341, 530,
|
||||
531, 532, 32995, 32996, 32997, 32998, 65537};
|
||||
|
||||
Py_ssize_t tags_size;
|
||||
PyObject *item;
|
||||
|
|
@ -821,7 +821,8 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) {
|
|||
}
|
||||
}
|
||||
|
||||
if (type == TIFF_BYTE || type == TIFF_UNDEFINED) {
|
||||
if (type == TIFF_BYTE || type == TIFF_UNDEFINED ||
|
||||
key_int == TIFFTAG_INKNAMES) {
|
||||
status = ImagingLibTiffSetField(
|
||||
&encoder->state,
|
||||
(ttag_t)key_int,
|
||||
|
|
@ -973,7 +974,7 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) {
|
|||
status = ImagingLibTiffSetField(
|
||||
&encoder->state, (ttag_t)key_int, (UINT16)PyLong_AsLong(value)
|
||||
);
|
||||
} else if (type == TIFF_LONG) {
|
||||
} else if (type == TIFF_LONG || type == TIFF_IFD) {
|
||||
status = ImagingLibTiffSetField(
|
||||
&encoder->state, (ttag_t)key_int, (UINT32)PyLong_AsLong(value)
|
||||
);
|
||||
|
|
@ -989,10 +990,6 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) {
|
|||
status = ImagingLibTiffSetField(
|
||||
&encoder->state, (ttag_t)key_int, (FLOAT32)PyFloat_AsDouble(value)
|
||||
);
|
||||
} else if (type == TIFF_DOUBLE) {
|
||||
status = ImagingLibTiffSetField(
|
||||
&encoder->state, (ttag_t)key_int, (FLOAT64)PyFloat_AsDouble(value)
|
||||
);
|
||||
} else if (type == TIFF_SBYTE) {
|
||||
status = ImagingLibTiffSetField(
|
||||
&encoder->state, (ttag_t)key_int, (INT8)PyLong_AsLong(value)
|
||||
|
|
@ -1001,7 +998,8 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) {
|
|||
status = ImagingLibTiffSetField(
|
||||
&encoder->state, (ttag_t)key_int, PyBytes_AsString(value)
|
||||
);
|
||||
} else if (type == TIFF_RATIONAL) {
|
||||
} else if (type == TIFF_DOUBLE || type == TIFF_SRATIONAL ||
|
||||
type == TIFF_RATIONAL) {
|
||||
status = ImagingLibTiffSetField(
|
||||
&encoder->state, (ttag_t)key_int, (FLOAT64)PyFloat_AsDouble(value)
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user