Skip to content

Commit 4be0055

Browse files
committed
Address 4186
JPEG with CMYK color space need inversion of the pixel colors.
1 parent 15149a9 commit 4be0055

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

src/__init__.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

src/extra.i

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3483,6 +3483,9 @@ void JM_make_image_block(fz_stext_block *block, PyObject *block_dict)
34833483
buf = freebuf = fz_new_buffer_from_image_as_png(ctx, image, fz_default_color_params);
34843484
ext = "png";
34853485
}
3486+
if (n == 4 && strcmp(ext, "jpeg") == 0) { // JPEG CMYK needs another step
3487+
buf = freebuf = fz_new_buffer_from_image_as_jpeg(ctx, image, fz_default_color_params, 95, 1);
3488+
}
34863489
bytes = JM_BinFromBuffer(buf);
34873490
}
34883491
fz_always(ctx) {

0 commit comments

Comments
 (0)