Spaces:
Sleeping
Sleeping
| 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" | |
| ) | |