File size: 3,258 Bytes
657cc8b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
95
96
97
98
99
100
101
102
import gradio as gr
from PIL import Image, ImageEnhance, ImageFilter

# ํ•„ํ„ฐ ์ ์šฉ ํ•จ์ˆ˜
def apply_filter(image, filter_type, intensity):
    image = image.convert("RGB")
    
    if filter_type == "Soft Glow":
        return image.filter(ImageFilter.GaussianBlur(radius=intensity))
    elif filter_type == "Portrait Enhancer":
        enhancer = ImageEnhance.Color(image)
        return enhancer.enhance(1 + intensity / 10)
    elif filter_type == "Warm Tone":
        r, g, b = image.split()
        r = r.point(lambda i: min(255, i + intensity * 10))
        return Image.merge("RGB", (r, g, b))
    elif filter_type == "Cold Tone":
        r, g, b = image.split()
        b = b.point(lambda i: min(255, i + intensity * 10))
        return Image.merge("RGB", (r, g, b))
    elif filter_type == "High-Key":
        enhancer = ImageEnhance.Brightness(image)
        return enhancer.enhance(1 + intensity / 10)
    elif filter_type == "Low-Key":
        enhancer = ImageEnhance.Brightness(image)
        return enhancer.enhance(1 - intensity / 10)
    elif filter_type == "Haze":
        return image.filter(ImageFilter.BLUR)
    elif filter_type == "Monochrome":
        return image.convert("L").convert("RGB")
    else:
        return image

# ์ดˆ๊ธฐ๊ฐ’ ์„ค์ • ํ•จ์ˆ˜
def set_initial_intensity(filter_type):
    # ํ•„ํ„ฐ๋ณ„ ์ดˆ๊ธฐ๊ฐ’ ์ง€์ •
    initial_values = {
        "Soft Glow": 3,
        "Portrait Enhancer": 2,
        "Warm Tone": 5,
        "Cold Tone": 5,
        "High-Key": 3,
        "Low-Key": 3,
        "Haze": 2,
        "Monochrome": 0
    }
    return initial_values.get(filter_type, 0)

# Gradio UI ๊ตฌ์„ฑ
with gr.Blocks() as demo:
    gr.Markdown("# ์ธ๋ฌผ ์‚ฌ์ง„ ํ•„ํ„ฐ ์ ์šฉ๊ธฐ")
    
    with gr.Row():
        with gr.Column():
            image_input = gr.Image(type="pil", label="์ด๋ฏธ์ง€ ์—…๋กœ๋“œ")
            filter_type = gr.Dropdown(
                choices=[
                    "Soft Glow", "Portrait Enhancer", "Warm Tone", 
                    "Cold Tone", "High-Key", "Low-Key", "Haze", "Monochrome"
                ], 
                value="Soft Glow",  # ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •
                label="ํ•„ํ„ฐ ์„ ํƒ"
            )
            intensity = gr.Slider(
                0, 10, value=3, step=1, label="ํ•„ํ„ฐ ๊ฐ•๋„"
            )
        with gr.Column():
            filtered_image = gr.Image(type="pil", label="ํ•„ํ„ฐ ์ ์šฉ ์ด๋ฏธ์ง€")
    
    # ํ•„ํ„ฐ ์ ์šฉ ๋ฐ ๊ฒฐ๊ณผ ์—ฐ๊ฒฐ
    def process_image(image, filter_type, intensity):
        if image is None:
            return None
        filtered_image = apply_filter(image, filter_type, intensity)
        return filtered_image
    
    def update_intensity_on_filter_change(filter_type):
        return set_initial_intensity(filter_type)
    
    # UI ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ
    filter_type.change(
        update_intensity_on_filter_change,
        inputs=filter_type,
        outputs=intensity
    )
    
    image_input.change(
        process_image,
        inputs=[image_input, filter_type, intensity],
        outputs=[filtered_image]
    )
    
    intensity.change(
        process_image,
        inputs=[image_input, filter_type, intensity],
        outputs=[filtered_image]
    )

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