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