Revert "Work around Ghostscript 10.6.0 JPEG encoding issue by forcing optimization."

This reverts commit f4c6c8121b.

The issue is now resolved by correcting the encoidng issue directly.
This commit is contained in:
James R. Barlow
2025-12-23 15:03:51 -08:00
parent 01a3706281
commit fc30cb8903
+10 -13
View File
@@ -17,7 +17,6 @@ from typing import Any, NamedTuple, NewType
from zlib import compress
import img2pdf
from packaging.version import Version
from pikepdf import (
Dictionary,
Name,
@@ -33,7 +32,7 @@ from pikepdf.models.image import HifiPrintImageNotTranscodableError
from PIL import Image
from ocrmypdf._concurrent import Executor, SerialExecutor
from ocrmypdf._exec import ghostscript, jbig2enc, pngquant
from ocrmypdf._exec import jbig2enc, pngquant
from ocrmypdf._jobcontext import PdfContext
from ocrmypdf._progressbar import ProgressBar
from ocrmypdf.exceptions import OutputFileAccessError
@@ -191,16 +190,6 @@ def extract_image_jbig2(
return None
def _should_optimize_jpeg(options, filtdp):
if options.optimize >= 2:
return True
if options.optimize < 2 and ghostscript.version() >= Version('10.6.0'):
# Ghostscript 10.6.0+ introduced some sort of JPEG encoding issue.
# To resolve this, re-optimize the JPEG anyway.
return True
return False
def extract_image_generic(
*, pdf: Pdf, root: Path, image: Stream, xref: Xref, options
) -> XrefExt | None:
@@ -214,7 +203,15 @@ def extract_image_generic(
if pim.bits_per_component == 1:
return None
if filtdp[0] == Name.DCTDecode and _should_optimize_jpeg(options, filtdp):
if filtdp[0] == Name.DCTDecode and options.optimize >= 2:
# This is a simple heuristic derived from some training data, that has
# about a 70% chance of guessing whether the JPEG is high quality,
# and possibly recompressible, or not. The number itself doesn't mean
# anything.
# bytes_per_pixel = int(raw_jpeg.Length) / (w * h)
# jpeg_quality_estimate = 117.0 * (bytes_per_pixel ** 0.213)
# if jpeg_quality_estimate < 65:
# return None
try:
imgname = root / f'{xref:08d}'
with imgname.open('wb') as f: