87 lines
2.7 KiB
Python
87 lines
2.7 KiB
Python
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() |