Advanced-Image-Processing-Suite / src /image_processing.py
aaron-official's picture
Add all project files and updates
fc8bf44
from PIL import Image, ImageEnhance, ImageFilter, ImageOps
import numpy as np
import cv2
from pathlib import Path
from rembg import remove
import logging
class ImageProcessor:
def convert_image(self, input_path, output_format, quality=95):
try:
img = Image.open(input_path)
if output_format.upper() in ["JPEG", "JPG", "BMP", "PDF"]:
if img.mode in ("RGBA", "LA", "P"):
background = Image.new("RGB", img.size, (255, 255, 255))
if img.mode == "P":
img = img.convert("RGBA")
background.paste(img, mask=img.split()[-1] if img.mode in ("RGBA", "LA") else None)
img = background
else:
img = img.convert("RGB")
elif output_format.upper() == "PNG":
if img.mode != "RGBA":
img = img.convert("RGBA")
elif output_format.upper() in ["TIFF", "TIF"]:
pass
else:
img = img.convert("RGB")
out_path = Path(input_path).with_suffix(f".{output_format.lower()}")
save_kwargs = {}
if output_format.upper() in ["JPEG", "JPG"]:
save_kwargs = {"quality": quality, "optimize": True}
elif output_format.upper() == "PNG":
save_kwargs = {"optimize": True}
elif output_format.upper() == "WEBP":
save_kwargs = {"quality": quality, "method": 6}
img.save(out_path, format=output_format.upper(), **save_kwargs)
return str(out_path), f"βœ… Converted to {output_format.upper()}"
except Exception as e:
logging.exception("Image conversion failed")
return None, f"❌ Error: {str(e)}"
def enhance_image(self, input_path, enhancement_type, intensity=1.0):
try:
img = Image.open(input_path)
if enhancement_type == "AI Super Resolution":
img = img.resize((img.width * 2, img.height * 2), Image.LANCZOS)
elif enhancement_type == "Noise Reduction":
cv_img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
denoised = cv2.fastNlMeansDenoisingColored(cv_img, None, 10, 10, 7, 21)
img = Image.fromarray(cv2.cvtColor(denoised, cv2.COLOR_BGR2RGB))
elif enhancement_type == "Color Enhancement":
enhancer = ImageEnhance.Color(img)
img = enhancer.enhance(1.0 + intensity * 0.5)
elif enhancement_type == "Brightness/Contrast":
brightness = ImageEnhance.Brightness(img)
img = brightness.enhance(1.0 + intensity * 0.2)
contrast = ImageEnhance.Contrast(img)
img = contrast.enhance(1.0 + intensity * 0.3)
elif enhancement_type == "Sharpening":
enhancer = ImageEnhance.Sharpness(img)
img = enhancer.enhance(1.0 + intensity)
elif enhancement_type == "HDR Effect":
img_array = np.array(img, dtype=np.float32) / 255.0
img_array = np.power(img_array, 0.5 + intensity * 0.3)
img = Image.fromarray((img_array * 255).astype(np.uint8))
elif enhancement_type == "Black & White":
img = img.convert("L").convert("RGB")
elif enhancement_type == "Sepia":
img = ImageOps.colorize(img.convert("L"), "#704214", "#C8B99C")
elif enhancement_type == "Vintage Filter":
img = ImageEnhance.Contrast(img).enhance(0.8)
img = ImageEnhance.Brightness(img).enhance(1.1)
img = ImageEnhance.Color(img).enhance(0.7)
elif enhancement_type == "Vignette":
mask = Image.new("L", img.size, 0)
center_x, center_y = img.size[0] // 2, img.size[1] // 2
max_dist = min(center_x, center_y)
for y in range(img.size[1]):
for x in range(img.size[0]):
dist = ((x - center_x) ** 2 + (y - center_y) ** 2) ** 0.5
alpha = max(0, 255 - int(255 * dist / max_dist * intensity))
mask.putpixel((x, y), alpha)
img.putalpha(mask)
background = Image.new("RGB", img.size, (0, 0, 0))
background.paste(img, img)
img = background
out_path = Path(input_path).with_name(f"enhanced_{Path(input_path).name}")
img.save(out_path)
return str(out_path), f"βœ… Applied {enhancement_type} enhancement"
except Exception as e:
logging.exception("Image enhancement failed")
return None, f"❌ Enhancement error: {str(e)}"
def remove_background(self, input_path, service="local"):
try:
if service == "local":
img = Image.open(input_path)
result = remove(img)
out_path = Path(input_path).with_name(f"nobg_{Path(input_path).name}")
result.save(out_path)
return str(out_path), "βœ… Background removed locally"
else:
return None, f"❌ Service {service} not implemented in this module"
except Exception as e:
logging.exception("Background removal failed")
return None, f"❌ Background removal error: {str(e)}"