From 7e9289547128a9f91c2efe0147e00bdffb7f0182 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Mon, 16 Apr 2018 12:37:51 -0700 Subject: [PATCH] Parallelize pngquant --- src/ocrmypdf/pipeline.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/ocrmypdf/pipeline.py b/src/ocrmypdf/pipeline.py index 04bdfd6f..17f7ce11 100644 --- a/src/ocrmypdf/pipeline.py +++ b/src/ocrmypdf/pipeline.py @@ -1152,7 +1152,7 @@ def optimize_pdf( for xref in jpegs: pix = leptonica.Pix.read((root / '{:08d}.jpg'.format(xref))) - compdata = pix.generate_pdf_ci_data(leptonica.lept.L_JPEG_ENCODE, 10) + compdata = pix.generate_pdf_ci_data(leptonica.lept.L_JPEG_ENCODE, 75) im_obj = pike._get_object_id(xref, 0) im_obj.write( compdata.read(), pikepdf.Name('/DCTDecode'), @@ -1160,8 +1160,12 @@ def optimize_pdf( ) from ocrmypdf.exec import pngquant - for xref in pngs: - pngquant.quantize(make_img_name(xref), make_img_name(xref), 65, 80) + with concurrent.futures.ThreadPoolExecutor( + max_workers=options.jobs) as executor: + for xref in pngs: + executor.submit( + pngquant.quantize, + make_img_name(xref), make_img_name(xref), 65, 80) for xref in pngs: im_obj = pike._get_object_id(xref, 0) @@ -1177,7 +1181,6 @@ def optimize_pdf( if compdata.ncolors > 0: palette_pdf_string = compdata.get_palette_pdf_string() - log.info(palette_pdf_string) palette_data = pikepdf.Object.parse(palette_pdf_string) palette_stream = pikepdf.Stream(pike, bytes(palette_data)) palette = [pikepdf.Name('/Indexed'), pikepdf.Name('/DeviceRGB'), @@ -1191,7 +1194,6 @@ def optimize_pdf( elif compdata.spp == 4: cs = pikepdf.Name('/DeviceCMYK') im_obj.ColorSpace = cs - im_obj.write(compdata.read(), pikepdf.Name('/FlateDecode'), predictor) # Not object_stream_mode + preserve_pdfa generates noncompliant PDFs