@@ -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
@@ -16521,6 +16528,10 @@ def JM_make_image_block(block, block_dict):
1652116528 else:
1652216529 buf = mupdf.fz_new_buffer_from_image_as_png(image, mupdf.FzColorParams())
1652316530 ext = "png"
16531+ if ext == "jpeg" and n == 4: # JPEG and DeviceCMYK
16532+ buf = mupdf.fz_new_buffer_from_image_as_jpeg(
16533+ image,mupdf.FzColorParams(mupdf.fz_default_color_params),
16534+ 95, 1)
1652416535 bytes_ = JM_BinFromBuffer(buf)
1652516536 block_dict[ dictkey_width] = w
1652616537 block_dict[ dictkey_height] = h
0 commit comments