File size: 3,382 Bytes
26c7647
88f47fc
26c7647
 
88f47fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26c7647
88f47fc
 
26c7647
 
 
 
 
 
 
7d57750
88f47fc
 
 
 
 
 
 
26c7647
88f47fc
 
 
26c7647
88f47fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26c7647
 
88f47fc
26c7647
88f47fc
26c7647
 
 
 
 
 
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import streamlit as st
from PIL import Image, ImageEnhance, ImageOps, ImageDraw
import io

# Set Page Config
st.set_page_config(page_title="Modern Image Editor", layout="centered")

# Custom Style
st.markdown(
    """
    <style>
    .stApp {
        background-color: #f5f5f5;
        font-family: Arial, sans-serif;
    }
    .title {
        color: #333;
        font-size: 32px;
        font-weight: bold;
    }
    .caption {
        color: #555;
    }
    </style>
    """,
    unsafe_allow_html=True
)

# Title
st.markdown("<div class='title'>Modern Image Editor</div>", unsafe_allow_html=True)
st.write("Upload an image, apply multiple filters, and download the edited image.")

# Upload image
uploaded_file = st.file_uploader("Choose an image", type=["jpg", "jpeg", "png"])

if uploaded_file:
    # Load the image
    image = Image.open(uploaded_file)
    st.image(image, caption="Original Image", use_container_width=True)

    # Create a copy for editing
    edited_image = image.copy()

    # Sidebar for controls
    st.sidebar.title("Editing Options")

    # Grayscale filter
    if st.sidebar.checkbox("Apply Grayscale"):
        edited_image = ImageOps.grayscale(edited_image)

    # Brightness adjustment
    brightness = st.sidebar.slider("Adjust Brightness", 0.5, 3.0, 1.0, step=0.1)
    enhancer = ImageEnhance.Brightness(edited_image)
    edited_image = enhancer.enhance(brightness)

    # Contrast adjustment
    contrast = st.sidebar.slider("Adjust Contrast", 0.5, 3.0, 1.0, step=0.1)
    enhancer = ImageEnhance.Contrast(edited_image)
    edited_image = enhancer.enhance(contrast)

    # Saturation adjustment
    saturation = st.sidebar.slider("Adjust Saturation", 0.5, 3.0, 1.0, step=0.1)
    enhancer = ImageEnhance.Color(edited_image)
    edited_image = enhancer.enhance(saturation)

    # Sharpness adjustment
    sharpness = st.sidebar.slider("Adjust Sharpness", 0.5, 3.0, 1.0, step=0.1)
    enhancer = ImageEnhance.Sharpness(edited_image)
    edited_image = enhancer.enhance(sharpness)

    # Add text overlay
    if st.sidebar.checkbox("Add Text Overlay"):
        text = st.sidebar.text_input("Enter Text", "Sample Text")
        font_size = st.sidebar.slider("Font Size", 10, 100, 30)
        draw = ImageDraw.Draw(edited_image)
        draw.text((10, 10), text, fill="white")

    # Flip options
    flip_horizontal = st.sidebar.checkbox("Flip Horizontal")
    if flip_horizontal:
        edited_image = ImageOps.mirror(edited_image)

    flip_vertical = st.sidebar.checkbox("Flip Vertical")
    if flip_vertical:
        edited_image = ImageOps.flip(edited_image)

    # Rotate options
    rotation = st.sidebar.slider("Rotate Image", 0, 360, 0, step=1)
    if rotation:
        edited_image = edited_image.rotate(rotation, expand=True)

    # Border effect
    if st.sidebar.checkbox("Add Border"):
        border_width = st.sidebar.slider("Border Width", 1, 50, 10)
        edited_image = ImageOps.expand(edited_image, border=border_width, fill="black")

    # Display the edited image
    st.image(edited_image, caption="Edited Image", use_container_width=True)

    # Download the edited image
    buf = io.BytesIO()
    edited_image.save(buf, format="PNG")
    byte_im = buf.getvalue()

    st.download_button(
        label="Download Edited Image",
        data=byte_im,
        file_name="edited_image.png",
        mime="image/png"
    )