This commit is contained in:
2025-12-29 15:46:03 +01:00
parent ea540cf370
commit 9baf342e1e
11 changed files with 845 additions and 1 deletions

View File

@@ -0,0 +1,87 @@
import fitz # PyMuPDF
from PIL import Image
import io
import os
# --- NASTAVENÍ ---
INPUT_FILE = r'u:\Dropbox\Ordinace\Dokumentace_ke_zpracování\AdobeMakeSmaller\90df6f84-72c8-40b8-8993-ce7e244b0cea.pdf'
# 1. Prahové hodnoty: Zúžíme výběr na nejpravděpodobnější rozsah
THRESHOLDS = [110, 130, 150, 170]
# 2. DPI Varianty k testování
# 131 = Přesná polovina originálu (váš nápad)
# 150 = Standard
# 200 = Vysoká kvalita
# 262 = Originál (žádná ztráta detailů, jen ztráta barev)
DPI_LIST = [131, 150, 200, 262]
def generate_final_matrix():
if not os.path.exists(INPUT_FILE):
print(f"Chyba: Soubor nenalezen.")
return
# Příprava složky
base_folder = os.path.dirname(INPUT_FILE)
filename = os.path.basename(INPUT_FILE)
name_without_ext = os.path.splitext(filename)[0]
output_dir = os.path.join(base_folder, "_TEST_DPI_MATH")
if not os.path.exists(output_dir):
os.makedirs(output_dir)
print(f"Generuji varianty do: {output_dir}")
print("-" * 80)
print(f"{'DPI':<5} | {'Práh':<6} | {'Velikost':<12} | {'Poznámka'}")
print("-" * 80)
doc = fitz.open(INPUT_FILE)
for dpi in DPI_LIST:
# Přednačtení stránek v daném DPI
pages_at_dpi = []
for page in doc:
zoom = dpi / 72
matrix = fitz.Matrix(zoom, zoom)
pix = page.get_pixmap(matrix=matrix, colorspace=fitz.csGRAY)
pages_at_dpi.append(pix)
for t in THRESHOLDS:
new_doc = fitz.open()
for i, pix in enumerate(pages_at_dpi):
# Binarizace
img = Image.frombytes("L", [pix.width, pix.height], pix.samples)
img_bw = img.point(lambda x: 255 if x > t else 0, mode='1')
# Uložení
buffer = io.BytesIO()
img_bw.save(buffer, format="PNG", optimize=True)
# Vložení zpět
orig_rect = doc[i].rect
new_page = new_doc.new_page(width=orig_rect.width, height=orig_rect.height)
new_page.insert_image(orig_rect, stream=buffer.getvalue())
# Uložení
output_name = f"dpi{dpi}_t{t}.pdf"
output_path = os.path.join(output_dir, output_name)
new_doc.save(output_path, garbage=4, deflate=True)
new_doc.close()
# Výpis
size_kb = os.path.getsize(output_path) / 1024
note = ""
if dpi == 131: note = "(Polovina originálu)"
if dpi == 262: note = "(Originální rozlišení)"
print(f"{dpi:<5} | {t:<6} | {size_kb:<9.2f} KB | {note}")
doc.close()
print("-" * 80)
if __name__ == "__main__":
generate_final_matrix()