mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-14 11:26:27 +03:00
Added tags when saving YCbCr TIFF
This commit is contained in:
parent
be30792714
commit
5cdcc2cf64
|
@ -670,6 +670,15 @@ class TestFileLibTiff(LibTiffTestCase):
|
||||||
TiffImagePlugin.WRITE_LIBTIFF = False
|
TiffImagePlugin.WRITE_LIBTIFF = False
|
||||||
TiffImagePlugin.READ_LIBTIFF = False
|
TiffImagePlugin.READ_LIBTIFF = False
|
||||||
|
|
||||||
|
def test_save_ycbcr(self, tmp_path):
|
||||||
|
im = hopper("YCbCr")
|
||||||
|
outfile = str(tmp_path / "temp.tif")
|
||||||
|
im.save(outfile, compression="jpeg")
|
||||||
|
|
||||||
|
with Image.open(outfile) as reloaded:
|
||||||
|
assert reloaded.tag_v2[530] == (1, 1)
|
||||||
|
assert reloaded.tag_v2[532] == (0, 255, 128, 255, 128, 255)
|
||||||
|
|
||||||
def test_crashing_metadata(self, tmp_path):
|
def test_crashing_metadata(self, tmp_path):
|
||||||
# issue 1597
|
# issue 1597
|
||||||
with Image.open("Tests/images/rdf.tif") as im:
|
with Image.open("Tests/images/rdf.tif") as im:
|
||||||
|
|
|
@ -93,6 +93,7 @@ SUBIFD = 330
|
||||||
EXTRASAMPLES = 338
|
EXTRASAMPLES = 338
|
||||||
SAMPLEFORMAT = 339
|
SAMPLEFORMAT = 339
|
||||||
JPEGTABLES = 347
|
JPEGTABLES = 347
|
||||||
|
YCBCRSUBSAMPLING = 530
|
||||||
REFERENCEBLACKWHITE = 532
|
REFERENCEBLACKWHITE = 532
|
||||||
COPYRIGHT = 33432
|
COPYRIGHT = 33432
|
||||||
IPTC_NAA_CHUNK = 33723 # newsphoto properties
|
IPTC_NAA_CHUNK = 33723 # newsphoto properties
|
||||||
|
@ -1593,6 +1594,13 @@ def _save(im, fp, filename):
|
||||||
# no compression by default:
|
# no compression by default:
|
||||||
ifd[COMPRESSION] = COMPRESSION_INFO_REV.get(compression, 1)
|
ifd[COMPRESSION] = COMPRESSION_INFO_REV.get(compression, 1)
|
||||||
|
|
||||||
|
if im.mode == "YCbCr":
|
||||||
|
for tag, value in {
|
||||||
|
YCBCRSUBSAMPLING: (1, 1),
|
||||||
|
REFERENCEBLACKWHITE: (0, 255, 128, 255, 128, 255),
|
||||||
|
}.items():
|
||||||
|
ifd.setdefault(tag, value)
|
||||||
|
|
||||||
if libtiff:
|
if libtiff:
|
||||||
if "quality" in im.encoderinfo:
|
if "quality" in im.encoderinfo:
|
||||||
quality = im.encoderinfo["quality"]
|
quality = im.encoderinfo["quality"]
|
||||||
|
|
|
@ -808,6 +808,12 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) {
|
||||||
av + stride * 2);
|
av + stride * 2);
|
||||||
free(av);
|
free(av);
|
||||||
}
|
}
|
||||||
|
} else if (key_int == TIFFTAG_YCBCRSUBSAMPLING) {
|
||||||
|
status = ImagingLibTiffSetField(
|
||||||
|
&encoder->state,
|
||||||
|
(ttag_t)key_int,
|
||||||
|
(UINT16)PyLong_AsLong(PyTuple_GetItem(value, 0)),
|
||||||
|
(UINT16)PyLong_AsLong(PyTuple_GetItem(value, 1)));
|
||||||
} else if (type == TIFF_SHORT) {
|
} else if (type == TIFF_SHORT) {
|
||||||
UINT16 *av;
|
UINT16 *av;
|
||||||
/* malloc check ok, calloc checks for overflow */
|
/* malloc check ok, calloc checks for overflow */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user