import gradio as gr from PIL import Image, ImageEnhance, ImageOps, ImageFilter def apply_sepia(image): sepia = ImageOps.colorize(ImageOps.grayscale(image), "#704214", "#C0A080") return sepia def enhance_image( image, posterize_bits, contrast, brightness, sharpness, color, auto_enhance, grayscale, blur_radius, edge_enhance, emboss, invert, solarize_threshold, equalize, sepia ): # Posterize if posterize_bits < 8: image = ImageOps.posterize(image, posterize_bits) # Contrast image = ImageEnhance.Contrast(image).enhance(contrast) # Brightness image = ImageEnhance.Brightness(image).enhance(brightness) # Sharpness image = ImageEnhance.Sharpness(image).enhance(sharpness) # Color (Saturation) image = ImageEnhance.Color(image).enhance(color) # Auto enhance if auto_enhance: image = ImageOps.autocontrast(image) # Blur if blur_radius > 0: image = image.filter(ImageFilter.GaussianBlur(blur_radius)) # Edge Enhance if edge_enhance: image = image.filter(ImageFilter.EDGE_ENHANCE) # Emboss if emboss: image = image.filter(ImageFilter.EMBOSS) # Invert if invert: image = ImageOps.invert(image.convert("RGB")) # Solarize if solarize_threshold < 256: image = ImageOps.solarize(image, threshold=solarize_threshold) # Equalize if equalize: image = ImageOps.equalize(image) # Grayscale if grayscale: image = ImageOps.grayscale(image) # Sepia if sepia: image = apply_sepia(image) return image with gr.Blocks() as demo: gr.Markdown("## 🖼️ Advanced Image Enhancer") with gr.Row(): input_image = gr.Image(type="pil", label="Upload Image") output_image = gr.Image(type="pil", label="Enhanced Image") with gr.Accordion("Basic Enhancements", open=True): posterize_bits = gr.Slider(1, 8, value=8, step=1, label="Posterize Bits") contrast = gr.Slider(0.5, 3.0, value=1.0, step=0.1, label="Contrast") brightness = gr.Slider(0.5, 3.0, value=1.0, step=0.1, label="Brightness") sharpness = gr.Slider(0.5, 5.0, value=1.0, step=0.1, label="Sharpness") color = gr.Slider(0.0, 3.0, value=1.0, step=0.1, label="Color (Saturation)") auto_enhance = gr.Checkbox(label="Auto Enhance") grayscale = gr.Checkbox(label="Grayscale") with gr.Accordion("Creative Effects", open=False): blur_radius = gr.Slider(0, 10, value=0, step=1, label="Blur Radius") edge_enhance = gr.Checkbox(label="Edge Enhance") emboss = gr.Checkbox(label="Emboss") invert = gr.Checkbox(label="Invert Colors") solarize_threshold = gr.Slider(0, 255, value=256, step=1, label="Solarize Threshold (<=255 to apply)") equalize = gr.Checkbox(label="Equalize Histogram") sepia = gr.Checkbox(label="Apply Sepia Tone") enhance_button = gr.Button("Enhance Image") enhance_button.click( fn=enhance_image, inputs=[ input_image, posterize_bits, contrast, brightness, sharpness, color, auto_enhance, grayscale, blur_radius, edge_enhance, emboss, invert, solarize_threshold, equalize, sepia ], outputs=output_image, ) demo.launch()