Spaces:
Sleeping
Sleeping
| 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() | |