88 lines
2.7 KiB
Python
Executable File
88 lines
2.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
"""
|
||
Script pour régénérer toutes les miniatures avec le nouveau ratio (48px)
|
||
"""
|
||
import os
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
# Add app to path
|
||
sys.path.insert(0, str(Path(__file__).parent))
|
||
|
||
from app.db.session import get_peripherals_db
|
||
from app.models.peripheral import PeripheralPhoto
|
||
from app.utils.image_processor import ImageProcessor
|
||
|
||
|
||
def regenerate_thumbnails():
|
||
"""Régénérer toutes les miniatures"""
|
||
db = next(get_peripherals_db())
|
||
|
||
try:
|
||
# Get all photos
|
||
photos = db.query(PeripheralPhoto).all()
|
||
|
||
total = len(photos)
|
||
success = 0
|
||
errors = 0
|
||
|
||
print(f"📊 Trouvé {total} photos")
|
||
print("=" * 60)
|
||
|
||
for i, photo in enumerate(photos, 1):
|
||
print(f"\n[{i}/{total}] Photo ID {photo.id} - {photo.filename}")
|
||
|
||
# Check if main image exists
|
||
if not os.path.exists(photo.stored_path):
|
||
print(f" ⚠️ Image principale introuvable : {photo.stored_path}")
|
||
errors += 1
|
||
continue
|
||
|
||
# Get upload directory
|
||
upload_dir = os.path.dirname(photo.stored_path)
|
||
|
||
try:
|
||
# Delete old thumbnail
|
||
if photo.thumbnail_path and os.path.exists(photo.thumbnail_path):
|
||
old_size = os.path.getsize(photo.thumbnail_path)
|
||
os.remove(photo.thumbnail_path)
|
||
print(f" 🗑️ Ancienne miniature supprimée ({old_size} octets)")
|
||
|
||
# Generate new thumbnail with aspect ratio preserved
|
||
thumbnail_path, thumbnail_size = ImageProcessor.create_thumbnail_with_level(
|
||
image_path=photo.stored_path,
|
||
output_dir=upload_dir,
|
||
compression_level="medium"
|
||
)
|
||
|
||
# Update database
|
||
photo.thumbnail_path = thumbnail_path
|
||
db.commit()
|
||
|
||
print(f" ✅ Nouvelle miniature : {os.path.basename(thumbnail_path)} ({thumbnail_size} octets)")
|
||
|
||
# Show dimensions
|
||
from PIL import Image
|
||
with Image.open(thumbnail_path) as img:
|
||
print(f" 📐 Dimensions : {img.width}×{img.height}px")
|
||
|
||
success += 1
|
||
|
||
except Exception as e:
|
||
print(f" ❌ Erreur : {e}")
|
||
db.rollback()
|
||
errors += 1
|
||
|
||
print("\n" + "=" * 60)
|
||
print(f"✅ Succès : {success}/{total}")
|
||
print(f"❌ Erreurs : {errors}/{total}")
|
||
|
||
finally:
|
||
db.close()
|
||
|
||
|
||
if __name__ == "__main__":
|
||
print("🖼️ Régénération des miniatures avec ratio d'aspect conservé (48px)")
|
||
print("=" * 60)
|
||
regenerate_thumbnails()
|