From 6c50c7023580012c7118ab7bde4111b0ef7fa5ad Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Fri, 11 May 2018 23:42:26 -0700 Subject: [PATCH] Try to optimize paletted images --- src/ocrmypdf/_optimize.py | 11 ++++++++++- src/ocrmypdf/leptonica.py | 3 +++ src/ocrmypdf/pipeline.py | 1 - 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/ocrmypdf/_optimize.py b/src/ocrmypdf/_optimize.py index 0d27f49a..1deb6b91 100644 --- a/src/ocrmypdf/_optimize.py +++ b/src/ocrmypdf/_optimize.py @@ -125,7 +125,7 @@ def extract_image(*, doc, pike, root, log, image, xref, jbig2s, log.debug("Skipping small image, xref {}".format(xref)) return False - bpc = image.get('/BitsPerComponent', 8) + bpc = int(image.get('/BitsPerComponent', 8)) cs = image.get('/ColorSpace', '') w = int(image.Width) h = int(image.Height) @@ -177,6 +177,15 @@ def extract_image(*, doc, pike, root, log, image, xref, jbig2s, raw_jpeg_data = raw_jpeg.read_raw_bytes() (root / '{:08d}.jpg'.format(xref)).write_bytes(raw_jpeg_data) jpegs.append(xref) + elif cs[0] == '/Indexed' \ + and cs[1] in SIMPLE_COLORSPACES \ + and options.optimize >= 3 \ + and fitz: + # Try to improve on indexed images - these are far from low hanging + # fruit in most cases + pix = fitz.Pixmap(doc, xref) + pix.writePNG(make_img_name(root, xref), savealpha=False) + pngs.append(xref) elif cs in SIMPLE_COLORSPACES and fitz: # For any 'inferior' filter including /FlateDecode we extract # and recode as /FlateDecode diff --git a/src/ocrmypdf/leptonica.py b/src/ocrmypdf/leptonica.py index 92e35db9..79e99877 100644 --- a/src/ocrmypdf/leptonica.py +++ b/src/ocrmypdf/leptonica.py @@ -514,6 +514,9 @@ class CompressedData: raise LeptonicaError("CompressedData.open") return CompressedData(p_compdata[0]) + def __len__(self): + return self._compdata.nbytescomp + def read(self): buf = ffi.buffer(self._compdata.datacomp, self._compdata.nbytescomp) return bytes(buf) diff --git a/src/ocrmypdf/pipeline.py b/src/ocrmypdf/pipeline.py index 90843b6a..96f3aa02 100644 --- a/src/ocrmypdf/pipeline.py +++ b/src/ocrmypdf/pipeline.py @@ -960,7 +960,6 @@ def weave_layers( procset = pdf_base.pages[0].Resources.ProcSet font = pdf_base.pages[0].Resources.Font.get(font_key) - pdf_base.save(output_file)