ImageEffectsHub / app.py
Ghmustafa11's picture
Update app.py
2f85004 verified
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"
)