Skip to content

Instantly share code, notes, and snippets.

@me-suzy
Created October 7, 2025 20:31
Show Gist options
  • Save me-suzy/84c39fd322de04fd432cb2c391a2d00a to your computer and use it in GitHub Desktop.
Save me-suzy/84c39fd322de04fd432cb2c391a2d00a to your computer and use it in GitHub Desktop.
reyrtt.py
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