File size: 2,479 Bytes
8e89617
48e3bad
8e89617
48e3bad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8e89617
729e2d3
 
48e3bad
729e2d3
 
e4c233a
 
 
 
 
 
 
 
729e2d3
e4c233a
8db3ad1
e4c233a
8db3ad1
e4c233a
8db3ad1
 
 
 
 
729e2d3
48e3bad
8db3ad1
48e3bad
8db3ad1
729e2d3
8e89617
 
 
729e2d3
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
import gradio as gr
from PIL import Image, ImageEnhance, ImageOps, ImageFilter

# ํ•„ํ„ฐ ํšจ๊ณผ ์ •์˜
def apply_filter(image, filter_name, intensity):
    if filter_name == "Soft Glow":
        return image.filter(ImageFilter.GaussianBlur(intensity))
    elif filter_name == "Portrait Enhancer":
        enhancer = ImageEnhance.Brightness(image)
        return enhancer.enhance(1 + (intensity / 100))
    elif filter_name == "Warm Tone":
        red, green, blue = image.split()
        red = red.point(lambda p: min(255, p + intensity))
        return Image.merge("RGB", (red, green, blue))
    elif filter_name == "Cold Tone":
        red, green, blue = image.split()
        blue = blue.point(lambda p: min(255, p + intensity))
        return Image.merge("RGB", (red, green, blue))
    elif filter_name == "High-Key":
        enhancer = ImageEnhance.Brightness(image)
        return enhancer.enhance(1.5 + (intensity / 200))
    elif filter_name == "Low-Key":
        enhancer = ImageEnhance.Contrast(image)
        return enhancer.enhance(0.8 - (intensity / 200))
    elif filter_name == "Haze":
        return image.filter(ImageFilter.BLUR)
    elif filter_name == "Monochrome":
        return ImageOps.grayscale(image)
    else:
        return image

# Gradio UI ๊ตฌ์„ฑ
with gr.Blocks() as app:
    gr.Markdown("# ์ธ๋ฌผ ์‚ฌ์ง„ ํ•„ํ„ฐ ์ ์šฉ ์•ฑ")
    
    with gr.Row():
        input_image = gr.Image(label="์›๋ณธ ์ด๋ฏธ์ง€", type="pil")
        filter_name = gr.Dropdown(
            ["Soft Glow", "Portrait Enhancer", "Warm Tone", "Cold Tone", 
             "High-Key", "Low-Key", "Haze", "Monochrome"],
            label="ํ•„ํ„ฐ ์„ ํƒ"
        )
        intensity = gr.Slider(0, 100, step=1, label="ํ•„ํ„ฐ ๊ฐ•๋„")
        apply_button = gr.Button("ํ•„ํ„ฐ ์ ์šฉ")
        
    with gr.Row():
        comparison = gr.Image(label="๋ณ€๊ฒฝ ์ „ํ›„ ๋น„๊ต", type="pil")
    
    def apply_filter_and_compare(image, filter_name, intensity):
        filtered_image = apply_filter(image, filter_name, intensity)
        # ์Šฌ๋ผ์ด๋”๋ฅผ ์œ„ํ•œ ์ด๋ฏธ์ง€ ๊ฒฐํ•ฉ
        before_after = Image.new("RGB", (image.width * 2, image.height))
        before_after.paste(image, (0, 0))
        before_after.paste(filtered_image, (image.width, 0))
        return before_after
    
    apply_button.click(
        fn=apply_filter_and_compare,
        inputs=[input_image, filter_name, intensity],
        outputs=comparison
    )

# ์‹คํ–‰
if __name__ == "__main__":
    app.launch()