File size: 3,137 Bytes
31c66c0
 
 
 
cd85e77
 
 
 
 
 
 
 
 
18b301b
cd85e77
18b301b
 
 
 
 
 
cd85e77
18b301b
31c66c0
cd85e77
 
 
18b301b
31c66c0
cd85e77
 
 
 
18b301b
31c66c0
cd85e77
 
18b301b
cd85e77
 
 
 
18b301b
 
 
 
cd85e77
 
18b301b
cd85e77
18b301b
 
cd85e77
 
 
 
18b301b
31c66c0
 
cd85e77
18b301b
31c66c0
 
 
 
 
 
 
 
 
 
 
cd85e77
31c66c0
 
cd85e77
31c66c0
 
cd85e77
31c66c0
cd85e77
31c66c0
 
 
cd85e77
18b301b
cd85e77
18b301b
 
cd85e77
 
31c66c0
18b301b
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
"""
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()