From f755fb76ee8a1a9500a50ee2ef88fabe9e156d4f Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Sat, 14 Apr 2018 01:37:14 -0700 Subject: [PATCH] Try pngquant --- src/ocrmypdf/exec/pngquant.py | 45 +++++++++++++++++++++++++++++++++++ src/ocrmypdf/pipeline.py | 6 ++--- 2 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 src/ocrmypdf/exec/pngquant.py diff --git a/src/ocrmypdf/exec/pngquant.py b/src/ocrmypdf/exec/pngquant.py new file mode 100644 index 00000000..ba033360 --- /dev/null +++ b/src/ocrmypdf/exec/pngquant.py @@ -0,0 +1,45 @@ +# © 2018 James R. Barlow: github.com/jbarlow83 +# +# This file is part of OCRmyPDF. +# +# OCRmyPDF is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# OCRmyPDF is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OCRmyPDF. If not, see . + +from subprocess import CalledProcessError, run +from tempfile import TemporaryFile +from functools import lru_cache +import sys +import os +import shutil + +from . import get_version +from ..exceptions import ExitCode + + +@lru_cache(maxsize=1) +def version(): + return get_version('pngquant', regex=r'(\d+(\.\d+)*).*') + + +def quantize(input_file, output_file, quality_min, quality_max): + args = [ + 'pngquant', + '--force', + '--skip-if-larger', + '--output', output_file, + '--quality', '{}-{}'.format(quality_min, quality_max), + '--', + input_file + ] + proc = run(args) + proc.check_returncode() \ No newline at end of file diff --git a/src/ocrmypdf/pipeline.py b/src/ocrmypdf/pipeline.py index ea522892..f53457ce 100644 --- a/src/ocrmypdf/pipeline.py +++ b/src/ocrmypdf/pipeline.py @@ -1159,9 +1159,9 @@ def optimize_pdf( pikepdf.Null() ) - # from ocrmypdf.exec import pngquant - # for xref in pngs: - # pngquant.quantize(make_img_name(xref), make_img_name(xref), 65, 80) + from ocrmypdf.exec import pngquant + for xref in pngs: + pngquant.quantize(make_img_name(xref), make_img_name(xref), 65, 80) for xref in pngs: im_obj = pike._get_object_id(xref, 0)