z230
This commit is contained in:
87
MakeSmallerPDF/4 MakeSmaller.py
Normal file
87
MakeSmallerPDF/4 MakeSmaller.py
Normal 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()
|
||||
Reference in New Issue
Block a user