From afc4a26e3476344b838863ad111cd65922b7bb2f Mon Sep 17 00:00:00 2001 From: etienne Date: Tue, 2 Sep 2014 14:49:24 -0400 Subject: [PATCH] Fixed issue #857. When saving a JPEG and specifying 'keep' for quality or subsampling, if the source JPEG image is in grayscale mode, don't try to find the subsampling of the source, because grayscale images don't have any subsampling (it's only for color components). For the moment the fix also ignores subsampling of CMYK JPEG because currently Pillow doesn't support encoding JPEG in YCCK mode (and subsampling doesn't make sense in CMYK, but Pillow permits saving CMYK JPEG with subsampling, that's a bug). This fix pass those errors silently, i.e. it doesn't raise an error when 'keep' is used but it's not possible to keep the subsampling (because the image is grayscale or CMYK). I think it's the proper behavior but I'm not sure. --- PIL/JpegImagePlugin.py | 9 +++++++++ Tests/images/lena_gray.jpg | Bin 0 -> 23013 bytes Tests/test_file_jpeg.py | 9 +++++++++ encode.c | 10 +++++----- 4 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 Tests/images/lena_gray.jpg diff --git a/PIL/JpegImagePlugin.py b/PIL/JpegImagePlugin.py index 9cbab6b61..dde7d93ca 100644 --- a/PIL/JpegImagePlugin.py +++ b/PIL/JpegImagePlugin.py @@ -545,6 +545,15 @@ def convert_dict_qtables(qtables): def get_sampling(im): + # There's no subsampling when image have only 1 layer + # (grayscale images) or when they are CMYK (4 layers), + # so set subsampling to default value. + # + # NOTE: currently Pillow can't encode JPEG to YCCK format. + # If YCCK support is added in the future, subsampling code will have + # to be updated (here and in JpegEncode.c) to deal with 4 layers. + if not hasattr(im, 'layers') or im.layers in (1, 4): + return -1 sampling = im.layer[0][1:3] + im.layer[1][1:3] + im.layer[2][1:3] return samplings.get(sampling, -1) diff --git a/Tests/images/lena_gray.jpg b/Tests/images/lena_gray.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72e9a4a77172c62812b054e2b05a06f1bdb17002 GIT binary patch literal 23013 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 NUM_QUANT_TBLS) { - PyErr_SetString(PyExc_ValueError, "Not a valid numbers of quantization tables. Should be between 2 and 4."); + if (num_tables < 1 || num_tables > NUM_QUANT_TBLS) { + PyErr_SetString(PyExc_ValueError, "Not a valid numbers of quantization tables. Should be between 1 and 4."); return NULL; } qarrays = (unsigned int**) PyMem_Malloc(num_tables * sizeof(unsigned int*)); @@ -760,7 +760,7 @@ PyImaging_LibTiffEncoderNew(PyObject* self, PyObject* args) (ttag_t) PyInt_AsLong(key), intav); free(intav); - } + } } else { TRACE((" %d elements, setting as floats \n", len)); floatav = malloc(sizeof(float)*len); @@ -903,7 +903,7 @@ PyImaging_Jpeg2KEncoderNew(PyObject *self, PyObject *args) j2k_decode_coord_tuple(tile_offset, &context->tile_offset_x, &context->tile_offset_y); - j2k_decode_coord_tuple(tile_size, + j2k_decode_coord_tuple(tile_size, &context->tile_size_x, &context->tile_size_y); @@ -918,7 +918,7 @@ PyImaging_Jpeg2KEncoderNew(PyObject *self, PyObject *args) if (context->tile_offset_x > context->offset_x || context->tile_offset_y > context->offset_y) { - PyErr_SetString(PyExc_ValueError, + PyErr_SetString(PyExc_ValueError, "JPEG 2000 tile offset too large to cover image area"); Py_DECREF(encoder); return NULL;