import streamlit as st from PIL import Image, ImageEnhance, ImageFilter import io # Title and file uploader st.title("Image Editor") uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"]) if uploaded_file: # Load the uploaded image image = Image.open(uploaded_file) st.image(image, caption="Uploaded Image", use_column_width=True) # Feature controls st.sidebar.title("Editing Options") # Brightness brightness = st.sidebar.slider("Brightness", 0.1, 2.0, 1.0) enhancer = ImageEnhance.Brightness(image) image = enhancer.enhance(brightness) # Contrast contrast = st.sidebar.slider("Contrast", 0.1, 2.0, 1.0) enhancer = ImageEnhance.Contrast(image) image = enhancer.enhance(contrast) # Sharpness sharpness = st.sidebar.slider("Sharpness", 0.1, 2.0, 1.0) enhancer = ImageEnhance.Sharpness(image) image = enhancer.enhance(sharpness) # Convert to grayscale if st.sidebar.checkbox("Convert to Grayscale"): image = image.convert("L") # Apply filters filter_option = st.sidebar.selectbox("Apply Filter", ["None", "BLUR", "CONTOUR", "DETAIL", "EDGE_ENHANCE", "SHARPEN"]) if filter_option == "BLUR": image = image.filter(ImageFilter.BLUR) elif filter_option == "CONTOUR": image = image.filter(ImageFilter.CONTOUR) elif filter_option == "DETAIL": image = image.filter(ImageFilter.DETAIL) elif filter_option == "EDGE_ENHANCE": image = image.filter(ImageFilter.EDGE_ENHANCE) elif filter_option == "SHARPEN": image = image.filter(ImageFilter.SHARPEN) # Crop if st.sidebar.checkbox("Crop Image"): left = st.sidebar.number_input("Left", 0, image.width, 0) top = st.sidebar.number_input("Top", 0, image.height, 0) right = st.sidebar.number_input("Right", left + 1, image.width, image.width) bottom = st.sidebar.number_input("Bottom", top + 1, image.height, image.height) image = image.crop((left, top, right, bottom)) # Display the edited image st.image(image, caption="Edited Image", use_column_width=True) # Download the edited image buf = io.BytesIO() image.save(buf, format="PNG") byte_im = buf.getvalue() st.download_button("Download Edited Image", data=byte_im, file_name="edited_image.png", mime="image/png") # Instructions if no file uploaded else: st.write("Please upload an image to start editing.")