Created
October 7, 2025 20:31
-
-
Save me-suzy/84c39fd322de04fd432cb2c391a2d00a to your computer and use it in GitHub Desktop.
reyrtt.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
VARIANTĂ 1: Toate imaginile într-un singur PDF | |
pythonimport cv2 | |
import img2pdf | |
from pathlib import Path | |
from PIL import Image | |
def tiff_to_jpg_to_pdf(folder_input, folder_output=None, nume_pdf="document.pdf"): | |
""" | |
Convertește toate TIFF-urile în JPG și apoi într-un singur PDF. | |
Calitate maximă, fără pierderi. | |
""" | |
folder_input = Path(folder_input) | |
if folder_output is None: | |
folder_output = folder_input / "converted" | |
else: | |
folder_output = Path(folder_output) | |
folder_output.mkdir(exist_ok=True) | |
folder_jpg = folder_output / "jpg" | |
folder_jpg.mkdir(exist_ok=True) | |
# Găsește toate TIFF-urile | |
fisiere_tiff = sorted(list(folder_input.glob("*.tif")) + | |
list(folder_input.glob("*.tiff")) + | |
list(folder_input.glob("*.TIF")) + | |
list(folder_input.glob("*.TIFF"))) | |
if not fisiere_tiff: | |
print("❌ Nu s-au găsit fișiere TIFF!") | |
return | |
print(f"📁 Folder input: {folder_input}") | |
print(f"📊 Găsite {len(fisiere_tiff)} imagini TIFF") | |
print(f"💾 Output: {folder_output}\n") | |
print("=" * 70) | |
# Pasul 1: Convertește TIFF → JPG | |
print("\n🔄 PASUL 1: Conversie TIFF → JPG (calitate maximă)") | |
print("-" * 70) | |
fisiere_jpg = [] | |
for i, fisier_tiff in enumerate(fisiere_tiff, 1): | |
print(f"[{i}/{len(fisiere_tiff)}] {fisier_tiff.name}...", end=" ", flush=True) | |
try: | |
# Citește TIFF cu PIL pentru a păstra toate informațiile | |
img = Image.open(fisier_tiff) | |
# Convertește în RGB dacă e necesar | |
if img.mode not in ('RGB', 'L'): | |
img = img.convert('RGB') | |
# Salvează ca JPG cu calitate maximă | |
nume_jpg = fisier_tiff.stem + ".jpg" | |
cale_jpg = folder_jpg / nume_jpg | |
# Calitate 100, fără subsampling pentru calitate maximă | |
img.save(cale_jpg, 'JPEG', quality=100, subsampling=0, dpi=img.info.get('dpi', (300, 300))) | |
fisiere_jpg.append(cale_jpg) | |
print("✓") | |
except Exception as e: | |
print(f"✗ Eroare: {e}") | |
# Pasul 2: Creează PDF din JPG-uri | |
print(f"\n📄 PASUL 2: Creare PDF din {len(fisiere_jpg)} imagini JPG") | |
print("-" * 70) | |
try: | |
cale_pdf = folder_output / nume_pdf | |
# Convertește lista de căi în liste de string-uri | |
imagini_jpg_str = [str(img) for img in fisiere_jpg] | |
# Creează PDF cu img2pdf (păstrează calitatea originală) | |
with open(cale_pdf, "wb") as f: | |
f.write(img2pdf.convert(imagini_jpg_str)) | |
print(f"✓ PDF creat: {cale_pdf}") | |
print(f"✓ Dimensiune PDF: {cale_pdf.stat().st_size / (1024*1024):.2f} MB") | |
except Exception as e: | |
print(f"✗ Eroare la creare PDF: {e}") | |
print("\n" + "=" * 70) | |
print("✓ CONVERSIE COMPLETĂ!") | |
print(f"✓ JPG-uri salvate în: {folder_jpg}") | |
print(f"✓ PDF salvat în: {folder_output}") | |
# RULEAZĂ | |
tiff_to_jpg_to_pdf( | |
r"g:\Hidrotehnica 1960 (Anul 5, nr. 1-12)", | |
nume_pdf="Hidrotehnica_1960.pdf" | |
) | |
Instalează biblioteca necesară: | |
bashpip install img2pdf pillow | |
VARIANTĂ 2: Fiecare imagine = un PDF separat | |
pythonfrom PIL import Image | |
from pathlib import Path | |
import img2pdf | |
def tiff_to_jpg_and_individual_pdf(folder_input, folder_output=None): | |
""" | |
Convertește fiecare TIFF în: | |
- Un fișier JPG | |
- Un fișier PDF separat | |
""" | |
folder_input = Path(folder_input) | |
if folder_output is None: | |
folder_output = folder_input / "converted_individual" | |
else: | |
folder_output = Path(folder_output) | |
folder_output.mkdir(exist_ok=True) | |
folder_jpg = folder_output / "jpg" | |
folder_pdf = folder_output / "pdf" | |
folder_jpg.mkdir(exist_ok=True) | |
folder_pdf.mkdir(exist_ok=True) | |
fisiere_tiff = sorted(list(folder_input.glob("*.tif")) + | |
list(folder_input.glob("*.tiff")) + | |
list(folder_input.glob("*.TIF")) + | |
list(folder_input.glob("*.TIFF"))) | |
if not fisiere_tiff: | |
print("❌ Nu s-au găsit fișiere TIFF!") | |
return | |
print(f"📊 Găsite {len(fisiere_tiff)} imagini TIFF\n") | |
for i, fisier_tiff in enumerate(fisiere_tiff, 1): | |
print(f"[{i}/{len(fisiere_tiff)}] {fisier_tiff.name}") | |
try: | |
# Citește TIFF | |
img = Image.open(fisier_tiff) | |
if img.mode not in ('RGB', 'L'): | |
img = img.convert('RGB') | |
nume_base = fisier_tiff.stem | |
# Salvează JPG | |
cale_jpg = folder_jpg / f"{nume_base}.jpg" | |
img.save(cale_jpg, 'JPEG', quality=100, subsampling=0) | |
print(f" ✓ JPG: {cale_jpg.name}") | |
# Salvează PDF | |
cale_pdf = folder_pdf / f"{nume_base}.pdf" | |
with open(cale_pdf, "wb") as f: | |
f.write(img2pdf.convert(str(cale_jpg))) | |
print(f" ✓ PDF: {cale_pdf.name}") | |
except Exception as e: | |
print(f" ✗ Eroare: {e}") | |
print(f"\n✓ Gata!") | |
print(f"✓ JPG-uri: {folder_jpg}") | |
print(f"✓ PDF-uri: {folder_pdf}") | |
# RULEAZĂ | |
tiff_to_jpg_and_individual_pdf(r"g:\Hidrotehnica 1960 (Anul 5, nr. 1-12)") | |
VARIANTĂ 3: SUPER CALITATE cu PyMuPDF (fără conversie la JPG) | |
pythonimport fitz # PyMuPDF | |
from pathlib import Path | |
from PIL import Image | |
def tiff_direct_to_pdf(folder_input, folder_output=None, nume_pdf="document.pdf"): | |
""" | |
Convertește TIFF direct în PDF cu PyMuPDF. | |
Cea mai bună calitate, fără pierderi. | |
""" | |
folder_input = Path(folder_input) | |
if folder_output is None: | |
folder_output = folder_input / "pdf_output" | |
else: | |
folder_output = Path(folder_output) | |
folder_output.mkdir(exist_ok=True) | |
fisiere_tiff = sorted(list(folder_input.glob("*.tif")) + | |
list(folder_input.glob("*.tiff")) + | |
list(folder_input.glob("*.TIF")) + | |
list(folder_input.glob("*.TIFF"))) | |
if not fisiere_tiff: | |
print("❌ Nu s-au găsit fișiere TIFF!") | |
return | |
print(f"📊 Găsite {len(fisiere_tiff)} imagini TIFF") | |
print(f"📄 Creare PDF: {nume_pdf}\n") | |
# Creează PDF nou | |
pdf_doc = fitz.open() | |
for i, fisier_tiff in enumerate(fisiere_tiff, 1): | |
print(f"[{i}/{len(fisiere_tiff)}] {fisier_tiff.name}...", end=" ", flush=True) | |
try: | |
# Deschide imaginea | |
img = Image.open(fisier_tiff) | |
# Convertește în RGB dacă e necesar | |
if img.mode == 'RGBA': | |
img = img.convert('RGB') | |
elif img.mode not in ('RGB', 'L'): | |
img = img.convert('RGB') | |
# Salvează temporar ca PNG (lossless) | |
temp_png = folder_output / f"temp_{i}.png" | |
img.save(temp_png, 'PNG') | |
# Deschide imaginea cu PyMuPDF | |
img_doc = fitz.open(str(temp_png)) | |
# Convertește pagina în PDF | |
pdf_bytes = img_doc.convert_to_pdf() | |
img_pdf = fitz.open("pdf", pdf_bytes) | |
# Adaugă pagina la PDF-ul principal | |
pdf_doc.insert_pdf(img_pdf) | |
# Curăță | |
img_doc.close() | |
img_pdf.close() | |
temp_png.unlink() # Șterge fișierul temporar | |
print("✓") | |
except Exception as e: | |
print(f"✗ {e}") | |
# Salvează PDF-ul final | |
cale_pdf = folder_output / nume_pdf | |
pdf_doc.save(str(cale_pdf), deflate=True) | |
pdf_doc.close() | |
print(f"\n✓ PDF creat: {cale_pdf}") | |
print(f"✓ Dimensiune: {cale_pdf.stat().st_size / (1024*1024):.2f} MB") | |
print(f"✓ Pagini: {len(fisiere_tiff)}") | |
# RULEAZĂ | |
tiff_direct_to_pdf( | |
r"g:\Hidrotehnica 1960 (Anul 5, nr. 1-12)", | |
nume_pdf="Hidrotehnica_1960_HQ.pdf" | |
) | |
Pentru această variantă: | |
bashpip install PyMuPDF pillow | |
REZUMAT: | |
VariantăAvantajeCalitateVariantă 1 (img2pdf)Simplă, rapidă, un singur PDF⭐⭐⭐⭐ Foarte bunăVariantă 2PDF-uri individuale + JPG-uri⭐⭐⭐⭐ Foarte bunăVariantă 3 (PyMuPDF)Direct TIFF→PDF, fără pierderi⭐⭐⭐⭐⭐ Excelentă | |
Recomandarea mea: Variantă 3 (PyMuPDF) - cea mai bună calitate! 🎯 | |
Care variantă vrei să o încerci? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment