addon
This commit is contained in:
Executable
+87
@@ -0,0 +1,87 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user