File size: 2,700 Bytes
63495b1
f7e502f
7c2306e
f7e502f
 
 
db45890
f7e502f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
06010a5
f7e502f
9a7103b
7c2306e
4641d09
 
 
 
 
 
 
 
6765522
 
 
9a7103b
6765522
88fe407
b8897e0
 
 
4641d09
6765522
 
 
 
 
 
b8897e0
21a3715
88fe407
96910cf
 
 
 
6765522
88fe407
 
 
 
 
7c2306e
f7e502f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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()