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" )