import streamlit as st from PIL import Image, ImageEnhance, ImageOps from io import BytesIO # App title and description st.set_page_config(page_title="Image Editor", page_icon="🎨", layout="wide") st.title("🎨 Image Editor") st.write("Easily upload, enhance, and download your images with a variety of filters and adjustments.") # Sidebar for navigation st.sidebar.header("🎛️ Image Editing Options") # File upload uploaded_file = st.sidebar.file_uploader("📤 Upload an Image", type=["png", "jpg", "jpeg"]) if uploaded_file: # Display original image col1, col2 = st.columns(2) with col1: st.header("Original Image") image = Image.open(uploaded_file) st.image(image, use_container_width=True) # Editing options with col2: st.header("Edited Image") edited_image = image.copy() # Grayscale if st.sidebar.checkbox("🔳 Convert to Grayscale"): edited_image = ImageOps.grayscale(edited_image) # Brightness brightness = st.sidebar.slider("💡 Brightness", 0.5, 2.0, 1.0) enhancer = ImageEnhance.Brightness(edited_image) edited_image = enhancer.enhance(brightness) # Contrast contrast = st.sidebar.slider("🎚️ Contrast", 0.5, 2.0, 1.0) enhancer = ImageEnhance.Contrast(edited_image) edited_image = enhancer.enhance(contrast) # Sharpness sharpness = st.sidebar.slider("🔪 Sharpness", 0.5, 3.0, 1.0) enhancer = ImageEnhance.Sharpness(edited_image) edited_image = enhancer.enhance(sharpness) # Add border if st.sidebar.checkbox("🖼️ Add Border"): border_size = st.sidebar.slider("Border Size", 1, 50, 10) border_color = st.sidebar.color_picker("Border Color", "#000000") edited_image = ImageOps.expand(edited_image, border=border_size, fill=border_color) # Display edited image st.image(edited_image, use_container_width=True) # Download button buf = BytesIO() edited_image.save(buf, format="PNG") byte_im = buf.getvalue() st.download_button( label="📥 Download Edited Image", data=byte_im, file_name="edited_image.png", mime="image/png", ) else: st.info("👈 Upload an image to get started!")