File size: 3,112 Bytes
1bb3759
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from PIL import Image, ImageOps, ImageFilter, ImageEnhance
import io

def apply_operation(img, operation, factor=1.0):
    if img is None:
        return None

    pil_img = Image.fromarray(img)

    if operation == "rotate_left":
        pil_img = pil_img.rotate(90, expand=True)
    elif operation == "rotate_right":
        pil_img = pil_img.rotate(-90, expand=True)
    elif operation == "flip_horizontal":
        pil_img = ImageOps.mirror(pil_img)
    elif operation == "flip_vertical":
        pil_img = ImageOps.flip(pil_img)
    elif operation == "grayscale":
        pil_img = ImageOps.grayscale(pil_img)
    elif operation == "blur":
        pil_img = pil_img.filter(ImageFilter.GaussianBlur(radius=factor))
    elif operation == "brightness":
        enhancer = ImageEnhance.Brightness(pil_img)
        pil_img = enhancer.enhance(factor)
    elif operation == "sharpen":
        enhancer = ImageEnhance.Sharpness(pil_img)
        pil_img = enhancer.enhance(factor)
    elif operation == "invert":
        pil_img = ImageOps.invert(pil_img.convert("RGB"))
    return pil_img

with gr.Blocks() as demo:
    gr.Markdown("# Simple Image Editor")
    image_input = gr.Image(label="Upload Image", type="numpy")
    output_img = gr.Image(label="Edited Image")

    with gr.Row():
        btn_rotate_left = gr.Button("Rotate Left ⟲")
        btn_rotate_right = gr.Button("Rotate Right ⟳")
        btn_flip_h = gr.Button("Flip Horizontal ↔")
        btn_flip_v = gr.Button("Flip Vertical ↕")
        btn_grayscale = gr.Button("Grayscale")
        btn_invert = gr.Button("Invert Colors")

    with gr.Row():
        btn_blur = gr.Button("Blur")
        blur_slider = gr.Slider(0, 10, value=2, label="Blur Radius")

        btn_brightness = gr.Button("Brightness")
        brightness_slider = gr.Slider(0.1, 3.0, value=1.0, step=0.1, label="Brightness Factor")

        btn_sharpen = gr.Button("Sharpen")
        sharpen_slider = gr.Slider(0, 5, value=1, step=0.1, label="Sharpen Factor")

    def update_image(img, operation, factor=1.0):
        return apply_operation(img, operation, factor)

    btn_rotate_left.click(update_image, inputs=[image_input, gr.State("rotate_left")], outputs=output_img)
    btn_rotate_right.click(update_image, inputs=[image_input, gr.State("rotate_right")], outputs=output_img)
    btn_flip_h.click(update_image, inputs=[image_input, gr.State("flip_horizontal")], outputs=output_img)
    btn_flip_v.click(update_image, inputs=[image_input, gr.State("flip_vertical")], outputs=output_img)
    btn_grayscale.click(update_image, inputs=[image_input, gr.State("grayscale")], outputs=output_img)
    btn_invert.click(update_image, inputs=[image_input, gr.State("invert")], outputs=output_img)

    btn_blur.click(update_image, inputs=[image_input, gr.State("blur"), blur_slider], outputs=output_img)
    btn_brightness.click(update_image, inputs=[image_input, gr.State("brightness"), brightness_slider], outputs=output_img)
    btn_sharpen.click(update_image, inputs=[image_input, gr.State("sharpen"), sharpen_slider], outputs=output_img)

demo.launch()