Spaces:
Running
Running
| """ | |
| 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() |