@@ -4208,6 +4208,7 @@ def extract_image(self, xref):
42084208 raise ValueError( "not an image")
42094209
42104210 o = mupdf.pdf_dict_geta(obj, PDF_NAME('SMask'), PDF_NAME('Mask'))
4211+ cs_string = mupdf.pdf_dict_geta(obj, PDF_NAME('ColorSpace'), PDF_NAME('CS')).pdf_to_name()
42114212 if o.m_internal:
42124213 smask = mupdf.pdf_to_num(o)
42134214
@@ -4248,6 +4249,12 @@ def extract_image(self, xref):
42484249 mupdf.FzColorParams(mupdf.fz_default_color_params),
42494250 )
42504251 ext = "png"
4252+ elif ext == "jpeg" and cs_string == "DeviceCMYK":
4253+ # avoid incorrect JPG by inverting pixel color
4254+ img = mupdf.pdf_load_image(pdf, obj)
4255+ res = mupdf.fz_new_buffer_from_image_as_jpeg(
4256+ img, mupdf.FzColorParams(mupdf.fz_default_color_params),95,1)
4257+ ext = "jpeg"
42514258 else:
42524259 img = mupdf.fz_new_image_from_buffer(res)
42534260
@@ -16555,6 +16562,10 @@ def JM_make_image_block(block, block_dict):
1655516562 else:
1655616563 buf = mupdf.fz_new_buffer_from_image_as_png(image, mupdf.FzColorParams())
1655716564 ext = "png"
16565+ if ext == "jpeg" and n == 4: # JPEG and DeviceCMYK
16566+ buf = mupdf.fz_new_buffer_from_image_as_jpeg(
16567+ image,mupdf.FzColorParams(mupdf.fz_default_color_params),
16568+ 95, 1)
1655816569 bytes_ = JM_BinFromBuffer(buf)
1655916570 block_dict[ dictkey_width] = w
1656016571 block_dict[ dictkey_height] = h
0 commit comments