|
|
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 |
|
|
|
|
|
|
|
|
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() |
|
|
|