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