File size: 4,130 Bytes
c513c85
2f85004
c513c85
 
 
 
2f85004
c513c85
 
 
 
 
2f85004
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c513c85
 
 
 
 
f615de2
 
c513c85
f615de2
2f85004
f615de2
 
 
c513c85
2f85004
 
 
 
 
 
 
 
 
 
 
 
 
c513c85
f615de2
2f85004
f615de2
 
c513c85
f615de2
 
 
 
 
 
 
 
 
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
import streamlit as st
from PIL import Image, ImageOps, ImageEnhance

# Function to apply effects
def apply_effect(image, effect):
    if effect == "kiss":
        image = image.convert("L")  # Grayscale
    elif effect == "sepia":
        sepia_img = ImageOps.colorize(image.convert("L"), black="black", white="orange")
        image = sepia_img
    elif effect == "invert":
        image = ImageOps.invert(image.convert("RGB"))
    elif effect == "contrast":
        enhancer = ImageEnhance.Contrast(image)
        image = enhancer.enhance(2.0)  # Increase contrast
    elif effect == "brightness":
        enhancer = ImageEnhance.Brightness(image)
        image = enhancer.enhance(1.5)  # Increase brightness
    elif effect == "sharpness":
        enhancer = ImageEnhance.Sharpness(image)
        image = enhancer.enhance(2.0)  # Increase sharpness
    elif effect == "blur":
        image = image.filter(ImageFilter.BLUR)
    elif effect == "contour":
        image = image.filter(ImageFilter.CONTOUR)
    elif effect == "edge_enhance":
        image = image.filter(ImageFilter.EDGE_ENHANCE)
    elif effect == "emboss":
        image = image.filter(ImageFilter.EMBOSS)
    elif effect == "find_edges":
        image = image.filter(ImageFilter.FIND_EDGES)
    elif effect == "solarize":
        image = ImageOps.solarize(image, threshold=128)
    elif effect == "posterize":
        image = ImageOps.posterize(image, bits=2)
    elif effect == "grayscale":
        image = image.convert("L")
    elif effect == "autocontrast":
        image = ImageOps.autocontrast(image)
    elif effect == "equalize":
        image = ImageOps.equalize(image)
    elif effect == "flip":
        image = ImageOps.mirror(image)
    elif effect == "rotate_90":
        image = image.rotate(90, expand=True)
    elif effect == "rotate_180":
        image = image.rotate(180, expand=True)
    elif effect == "rotate_270":
        image = image.rotate(270, expand=True)
    elif effect == "crop_center":
        width, height = image.size
        left = width * 0.25
        top = height * 0.25
        right = width * 0.75
        bottom = height * 0.75
        image = image.crop((left, top, right, bottom))
    elif effect == "resize_50%":
        image = image.resize((image.size[0] // 2, image.size[1] // 2))
    elif effect == "resize_200%":
        image = image.resize((image.size[0] * 2, image.size[1] * 2))
    return image

# Streamlit app
st.title("Image Effect Converter")

# Upload multiple images
uploaded_files = st.file_uploader("Upload images", type=["jpg", "png", "jpeg"], accept_multiple_files=True)

if uploaded_files:
    for idx, uploaded_file in enumerate(uploaded_files):
        # Display each uploaded image
        image = Image.open(uploaded_file)
        st.image(image, caption=f"Uploaded Image: {uploaded_file.name}", use_column_width=True)

        # 20+ effects in the selectbox
        effects = [
            "kiss", "sepia", "invert", "contrast", "brightness", "sharpness", "blur",
            "contour", "edge_enhance", "emboss", "find_edges", "solarize", "posterize",
            "grayscale", "autocontrast", "equalize", "flip", "rotate_90", "rotate_180",
            "rotate_270", "crop_center", "resize_50%", "resize_200%"
        ]

        effect = st.selectbox(
            f"Choose an effect for {uploaded_file.name}",
            effects,
            key=f"effect_{idx}"
        )

        # Apply effect
        if st.button(f"Apply Effect to {uploaded_file.name}", key=f"button_{idx}"):
            processed_image = apply_effect(image, effect)
            st.image(processed_image, caption=f"Processed Image: {uploaded_file.name}", use_column_width=True)

            # Download button for each processed image
            processed_image.save(f"processed_{uploaded_file.name}")
            with open(f"processed_{uploaded_file.name}", "rb") as file:
                st.download_button(
                    label=f"Download {uploaded_file.name}",
                    data=file,
                    file_name=f"processed_{uploaded_file.name}",
                    mime="image/png"
                )