File size: 2,996 Bytes
aa40e51
69975d3
aa40e51
e7a70de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
706010f
 
 
 
 
 
e7a70de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
706010f
 
 
e7a70de
 
 
 
 
 
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
import streamlit as st
from PIL import Image, ImageEnhance, ImageFilter
import numpy as np
import io

# Function to apply filters
def apply_filter(img, filter_name, value):
    if filter_name == 'Grayscale':
        return img.convert("L")
    elif filter_name == 'Blur':
        return img.filter(ImageFilter.GaussianBlur(radius=value))
    elif filter_name == 'Magic Eraser':
        img = np.array(img)
        img[img == 255] = 0  # Magic Eraser: remove white pixels
        return Image.fromarray(img)
    elif filter_name == 'Sharpness':
        enhancer = ImageEnhance.Sharpness(img)
        return enhancer.enhance(value)
    elif filter_name == 'Contrast':
        enhancer = ImageEnhance.Contrast(img)
        return enhancer.enhance(value)
    elif filter_name == 'Saturation':
        enhancer = ImageEnhance.Color(img)
        return enhancer.enhance(value)
    elif filter_name == 'Brightness':
        enhancer = ImageEnhance.Brightness(img)
        return enhancer.enhance(value)
    elif filter_name == 'Tint':
        img = np.array(img)
        img = np.clip(img + (value * 50), 0, 255)
        return Image.fromarray(img)
    else:
        return img

def crop_image(img, left, top, right, bottom):
    return img.crop((left, top, right, bottom))

# Streamlit UI components
st.title('Image Editor')

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

if uploaded_file is not None:
    # Open the uploaded image
    img = Image.open(uploaded_file)

    # Create two columns for side-by-side display
    col1, col2 = st.columns(2)

    # Display the original image in the first column
    with col1:
        st.image(img, caption="Uploaded Image", use_column_width=True)

    # Filter options
    filter_name = st.selectbox("Choose a filter", 
                               ["None", "Grayscale", "Blur", "Magic Eraser", "Sharpness", "Contrast", "Saturation", "Brightness", "Tint"])
    
    if filter_name in ["Blur", "Sharpness", "Contrast", "Saturation", "Brightness"]:
        value = st.slider(f"Adjust {filter_name}", 0.0, 2.0, 1.0)
    elif filter_name == "Tint":
        value = st.slider("Adjust Tint", -1.0, 1.0, 0.0)
    else:
        value = 0
    
    if filter_name != "None":
        img = apply_filter(img, filter_name, value)
    
    # Cropping
    st.write("Crop Image")
    left = st.slider("Left", 0, img.width, 0)
    top = st.slider("Top", 0, img.height, 0)
    right = st.slider("Right", 0, img.width, img.width)
    bottom = st.slider("Bottom", 0, img.height, img.height)
    
    img = crop_image(img, left, top, right, bottom)
    
    # Display updated image after all adjustments in the second column
    with col2:
        st.image(img, caption="Edited Image", use_column_width=True)

    # Download the edited image
    buffer = io.BytesIO()
    img.save(buffer, format="PNG")
    buffer.seek(0)
    st.download_button(label="Download Image", data=buffer, file_name="edited_image.png", mime="image/png")