|
|
import logging |
|
|
from PIL import Image |
|
|
import numpy as np |
|
|
from pathlib import Path |
|
|
|
|
|
class ImageAnalysis: |
|
|
@staticmethod |
|
|
def analyze_image(img_path): |
|
|
if not img_path: |
|
|
return {"error": "No image provided"} |
|
|
try: |
|
|
img = Image.open(img_path) |
|
|
analysis = { |
|
|
"dimensions": f"{img.width} x {img.height}", |
|
|
"format": img.format, |
|
|
"mode": img.mode, |
|
|
"file_size": f"{Path(img_path).stat().st_size / 1024:.1f} KB", |
|
|
"has_transparency": img.mode in ("RGBA", "LA") or "transparency" in img.info, |
|
|
"color_palette": "Analyzed" if img.mode == "P" else "N/A" |
|
|
} |
|
|
if img.mode == "RGB": |
|
|
img_array = np.array(img) |
|
|
analysis["average_color"] = { |
|
|
"red": int(np.mean(img_array[:,:,0])), |
|
|
"green": int(np.mean(img_array[:,:,1])), |
|
|
"blue": int(np.mean(img_array[:,:,2])) |
|
|
} |
|
|
analysis["brightness"] = int(np.mean(img_array)) |
|
|
return analysis |
|
|
except Exception as e: |
|
|
logging.exception("Image analysis failed") |
|
|
return {"error": f"Analysis failed: {str(e)}"} |
|
|
|