Spaces:
Sleeping
Sleeping
| import os | |
| from datetime import datetime | |
| from typing import List | |
| from PIL import Image | |
| from fastapi import FastAPI, File, UploadFile, HTTPException | |
| from fastapi.responses import FileResponse | |
| from fastapi.responses import JSONResponse | |
| from pydantic import BaseModel | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from wall_service import color_wall | |
| app = FastAPI() | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], # Autorise toutes les origines | |
| allow_credentials=True, | |
| allow_methods=["*"], # Autorise toutes les méthodes | |
| allow_headers=["*"], # Autorise tous les en-têtes | |
| ) | |
| # Dossier où les images seront sauvegardées | |
| UPLOAD_DIRECTORY = "galerie" | |
| MODIFIED_IMAGES_DIR = "galerie_modifiees" | |
| # Créer le dossier s'il n'existe pas | |
| if not os.path.exists(UPLOAD_DIRECTORY): | |
| os.makedirs(UPLOAD_DIRECTORY) | |
| if not os.path.exists(MODIFIED_IMAGES_DIR): | |
| os.makedirs(MODIFIED_IMAGES_DIR) | |
| async def upload_image(file: UploadFile = File(...)): | |
| try: | |
| # Générer un nom unique pour éviter les conflits | |
| timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
| file_extension = os.path.splitext(file.filename)[1] | |
| new_filename = f"{timestamp}_{file.filename}" | |
| file_path = os.path.join(UPLOAD_DIRECTORY, new_filename) | |
| # Sauvegarder le fichier localement | |
| with open(file_path, "wb") as buffer: | |
| buffer.write(await file.read()) | |
| # Retourner le chemin du fichier pour d'autres traitements | |
| return JSONResponse(content={"message": "Image uploaded successfully", "file_path": file_path}) | |
| except Exception as e: | |
| return JSONResponse(content={"error": str(e)}, status_code=500) | |
| # Modèle Pydantic pour valider les données entrantes | |
| class TextureRequest(BaseModel): | |
| file_path: str | |
| color_rgb: List[int] | |
| alpha: float | |
| async def apply_texture(request: TextureRequest): | |
| try: | |
| # Récupérer les données de la requête | |
| file_path = request.file_path | |
| color_rgb = tuple(request.color_rgb) | |
| alpha = request.alpha | |
| # Vérifier si le fichier existe (exemple) | |
| if not os.path.exists(file_path): | |
| raise HTTPException(status_code=404, detail="File not found") | |
| # Appliquer la texture | |
| modified_image, original_image = color_wall(file_path, color_rgb, alpha) | |
| # Convertir en image PIL | |
| pil_image = Image.fromarray(modified_image) | |
| # Réduire la taille de 33% | |
| new_size = (original_image.shape[1] // 3, original_image.shape[0] // 3) | |
| output_image = pil_image.resize(new_size, Image.LANCZOS) | |
| # Générer un nom unique pour le fichier | |
| timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
| file_name = f"modified_image_{timestamp}.jpg" | |
| file_path = os.path.join(MODIFIED_IMAGES_DIR, file_name) | |
| # Sauvegarder l'image modifiée | |
| output_image.save(file_path, quality=90) | |
| # Retourner le chemin du fichier pour d'autres traitements | |
| return FileResponse(path=file_path, media_type="image/jpg") | |
| except Exception as e: | |
| return JSONResponse(content={"error": str(e)}, status_code=500) | |