aaron-official's picture
Add all project files and updates
fc8bf44
from PIL import Image, ImageEnhance, ImageOps
import numpy as np
from pathlib import Path
import colorsys
import logging
def apply_custom_filter(img_path, bright, cont, sat, hue):
if not img_path:
return None, "❌ Please upload an image"
try:
img = Image.open(img_path)
if bright != 0:
enhancer = ImageEnhance.Brightness(img)
img = enhancer.enhance(1 + bright / 100)
if cont != 0:
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(1 + cont / 100)
if sat != 0:
enhancer = ImageEnhance.Color(img)
img = enhancer.enhance(1 + sat / 100)
if hue != 0 and img.mode == "RGB":
img_array = np.array(img)
hsv = np.array([colorsys.rgb_to_hsv(r/255, g/255, b/255) for r, g, b in img_array.reshape(-1, 3)])
hsv[:, 0] = (hsv[:, 0] + hue / 360) % 1.0
rgb = np.array([colorsys.hsv_to_rgb(h, s, v) for h, s, v in hsv])
img_array = (rgb * 255).astype(np.uint8).reshape(img_array.shape)
img = Image.fromarray(img_array)
out_path = Path(img_path).with_name(f"filtered_{Path(img_path).name}")
img.save(out_path)
return str(out_path), "✅ Custom filter applied successfully"
except Exception as e:
logging.exception("Custom filter failed")
return None, f"❌ Filter error: {str(e)}"