diff --git a/weasyprint/images.py b/weasyprint/images.py index 64b44536a..417a1c11b 100644 --- a/weasyprint/images.py +++ b/weasyprint/images.py @@ -66,6 +66,7 @@ def __init__(self, pillow_image, image_id, image_data, filename=None, self.height = pillow_image.height self.ratio = (self.width / self.height) if self.height != 0 else inf self.optimize = optimize = options['optimize_images'] + self.app14 = getattr(original_pillow_image, 'app', {}).get('APP14') if pillow_image.format in ('JPEG', 'MPO'): self.format = 'JPEG' @@ -150,6 +151,11 @@ def get_x_object(self, interpolate, dpi_ratio): }) if self.format == 'JPEG': + if self.mode == 'CMYK' and self.app14 is not None: + # The presence of the APP14 segment indicates an Adobe image + # with inverted CMYK data. Specify a Decode Array to invert + # it again back to normal. + extra['Decode'] = '[1 0 1 0 1 0 1 0]' extra['Filter'] = '/DCTDecode' return pydyf.Stream([self.image_data], extra)