Image-Scaler / app.py
MLap's picture
Update app.py
31c66c0 verified
"""
Image Enhancement Lab β€” Gradio (Spaces-ready, labeled sliders)
"""
import gradio as gr
import numpy as np
import tempfile
from PIL import Image, ImageEnhance, ImageFilter
def apply_enhancements(image, contrast, sharpness, brightness, saturation, upscale, blur_radius):
if image is None:
return None, None
original = Image.fromarray(image).convert("RGB")
# Prevent large image crashes
max_size = 1024
if max(original.size) > max_size:
original.thumbnail((max_size, max_size))
enhanced = original.copy()
# Upscale
if upscale != 1.0:
w, h = enhanced.size
enhanced = enhanced.resize((int(w * upscale), int(h * upscale)), Image.LANCZOS)
# Enhancements
enhanced = ImageEnhance.Contrast(enhanced).enhance(contrast)
enhanced = ImageEnhance.Brightness(enhanced).enhance(brightness)
enhanced = ImageEnhance.Color(enhanced).enhance(saturation)
enhanced = ImageEnhance.Sharpness(enhanced).enhance(sharpness)
# Blur
if blur_radius > 0:
enhanced = enhanced.filter(ImageFilter.GaussianBlur(radius=blur_radius))
return np.array(original), np.array(enhanced)
def save_enhanced(image, contrast, sharpness, brightness, saturation, upscale, blur_radius):
_, enh_np = apply_enhancements(
image, contrast, sharpness, brightness, saturation, upscale, blur_radius
)
if enh_np is None:
return None
tmp = tempfile.NamedTemporaryFile(suffix=".png", delete=False)
tmp.close()
Image.fromarray(enh_np).save(tmp.name)
return tmp.name
with gr.Blocks(title="Image Enhancement Lab") as demo:
gr.Markdown("# πŸ–ΌοΈ Image Enhancement Lab")
gr.Markdown("Upload an image and adjust sliders to enhance it.")
with gr.Row():
with gr.Column(scale=1):
image_input = gr.Image(label="Upload Image", type="numpy")
gr.Markdown("### 🎨 Color Adjustments")
contrast = gr.Slider(0.1, 3.0, 1.0, label="Contrast (1.0 = original)")
brightness = gr.Slider(0.1, 3.0, 1.0, label="Brightness (1.0 = original)")
saturation = gr.Slider(0.0, 3.0, 1.0, label="Saturation (0 = grayscale)")
gr.Markdown("### πŸ” Detail Controls")
sharpness = gr.Slider(0.0, 5.0, 1.0, label="Sharpness (0 = blurry)")
blur = gr.Slider(0.0, 10.0, 0.0, label="Gaussian Blur Radius")
gr.Markdown("### πŸ“ Size Control")
upscale = gr.Slider(0.25, 4.0, 1.0, label="Upscale Factor")
apply_btn = gr.Button("Apply Enhancements")
save_btn = gr.Button("Download Enhanced Image")
download = gr.File(label="Download File", visible=True)
with gr.Column(scale=2):
original_out = gr.Image(label="Original Image")
enhanced_out = gr.Image(label="Enhanced Image")
inputs = [image_input, contrast, sharpness, brightness, saturation, upscale, blur]
apply_btn.click(apply_enhancements, inputs, [original_out, enhanced_out])
save_btn.click(save_enhanced, inputs, download)
# Required for Hugging Face Spaces
demo.queue()
demo.launch()