rioanggara's picture
wew
4641d09
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()