import streamlit as st from PIL import Image, ImageEnhance, ImageOps, ImageDraw import io # Set Page Config st.set_page_config(page_title="Modern Image Editor", layout="centered") # Custom Style st.markdown( """ """, unsafe_allow_html=True ) # Title st.markdown("
Modern Image Editor
", unsafe_allow_html=True) st.write("Upload an image, apply multiple filters, and download the edited image.") # Upload image uploaded_file = st.file_uploader("Choose an image", type=["jpg", "jpeg", "png"]) if uploaded_file: # Load the image image = Image.open(uploaded_file) st.image(image, caption="Original Image", use_container_width=True) # Create a copy for editing edited_image = image.copy() # Sidebar for controls st.sidebar.title("Editing Options") # Grayscale filter if st.sidebar.checkbox("Apply Grayscale"): edited_image = ImageOps.grayscale(edited_image) # Brightness adjustment brightness = st.sidebar.slider("Adjust Brightness", 0.5, 3.0, 1.0, step=0.1) enhancer = ImageEnhance.Brightness(edited_image) edited_image = enhancer.enhance(brightness) # Contrast adjustment contrast = st.sidebar.slider("Adjust Contrast", 0.5, 3.0, 1.0, step=0.1) enhancer = ImageEnhance.Contrast(edited_image) edited_image = enhancer.enhance(contrast) # Saturation adjustment saturation = st.sidebar.slider("Adjust Saturation", 0.5, 3.0, 1.0, step=0.1) enhancer = ImageEnhance.Color(edited_image) edited_image = enhancer.enhance(saturation) # Sharpness adjustment sharpness = st.sidebar.slider("Adjust Sharpness", 0.5, 3.0, 1.0, step=0.1) enhancer = ImageEnhance.Sharpness(edited_image) edited_image = enhancer.enhance(sharpness) # Add text overlay if st.sidebar.checkbox("Add Text Overlay"): text = st.sidebar.text_input("Enter Text", "Sample Text") font_size = st.sidebar.slider("Font Size", 10, 100, 30) draw = ImageDraw.Draw(edited_image) draw.text((10, 10), text, fill="white") # Flip options flip_horizontal = st.sidebar.checkbox("Flip Horizontal") if flip_horizontal: edited_image = ImageOps.mirror(edited_image) flip_vertical = st.sidebar.checkbox("Flip Vertical") if flip_vertical: edited_image = ImageOps.flip(edited_image) # Rotate options rotation = st.sidebar.slider("Rotate Image", 0, 360, 0, step=1) if rotation: edited_image = edited_image.rotate(rotation, expand=True) # Border effect if st.sidebar.checkbox("Add Border"): border_width = st.sidebar.slider("Border Width", 1, 50, 10) edited_image = ImageOps.expand(edited_image, border=border_width, fill="black") # Display the edited image st.image(edited_image, caption="Edited Image", use_container_width=True) # Download the edited image buf = io.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" )