import gradio as gr from PIL import Image, ImageEnhance, ImageFilter def to_black_and_white(input_image, contrast, brightness, sharpness, color, filter_intensity): if input_image is None: return None # Adjust contrast enhancer = ImageEnhance.Contrast(input_image) adjusted_image = enhancer.enhance(contrast) # Adjust brightness enhancer = ImageEnhance.Brightness(adjusted_image) adjusted_image = enhancer.enhance(brightness) # Adjust sharpness enhancer = ImageEnhance.Sharpness(adjusted_image) adjusted_image = enhancer.enhance(sharpness) # Adjust color enhancer = ImageEnhance.Color(adjusted_image) adjusted_image = enhancer.enhance(color) # Apply a general filter for intensity adjusted_image = adjusted_image.filter(ImageFilter.GaussianBlur(radius=(1 - filter_intensity))) # Convert to grayscale bw_image = adjusted_image.convert("L") return bw_image presets = { "Noir": (2.0, 0.8, 1.5, 0.0, 0.2), "Vintage": (1.0, 1.2, 0.8, 1.5, 0.5), "High Contrast": (3.0, 1.0, 2.0, 0.0, 1.0), "Soft Glow": (0.8, 1.5, 0.5, 1.0, 0.8), "Classic": (1.5, 1.0, 1.0, 0.5, 0.3) } def apply_preset(preset): return presets.get(preset, (1.0, 1.0, 1.0, 1.0, 1.0)) with gr.Blocks() as app: gr.Markdown("### Black and White Image Maker with Advanced Adjustments and Presets") with gr.Row(): with gr.Column(): image_input = gr.Image(type="pil", label="Upload your Image") preset_dropdown = gr.Dropdown(list(presets.keys()), label="Presets") contrast_slider = gr.Slider(minimum=0.5, maximum=3.0, value=1.0, label="Contrast") brightness_slider = gr.Slider(minimum=0.5, maximum=3.0, value=1.0, label="Brightness") sharpness_slider = gr.Slider(minimum=0.5, maximum=3.0, value=1.0, label="Sharpness") color_slider = gr.Slider(minimum=0, maximum=3.0, value=1.0, label="Color Balance") filter_slider = gr.Slider(minimum=0, maximum=1.0, value=1.0, label="Filter Intensity") apply_button = gr.Button("Click to Apply") image_output = gr.Image(type="pil", label="Black and White Image") def update_sliders(preset_name): return apply_preset(preset_name) preset_dropdown.change(update_sliders, inputs=preset_dropdown, outputs=[contrast_slider, brightness_slider, sharpness_slider, color_slider, filter_slider]) apply_button.click( to_black_and_white, inputs=[image_input, contrast_slider, brightness_slider, sharpness_slider, color_slider, filter_slider], outputs=image_output ) app.launch()