import streamlit as st from PIL import Image, ImageEnhance def main(): st.title("Interactive Image Editor") st.sidebar.header("Features") uploaded_file = st.sidebar.file_uploader("Upload an Image", type=["jpg", "jpeg", "png"]) if uploaded_file: # Load the image image = Image.open(uploaded_file) edited_image = image.copy() st.subheader("Original Image") st.image(image, caption="Uploaded Image", use_column_width=True) # Adjustment Tools st.sidebar.subheader("Adjustments") # Grayscale grayscale = st.sidebar.checkbox("Apply Grayscale") # Brightness Adjustment brightness = st.sidebar.slider("Adjust Brightness", 0.5, 2.0, 1.0, 0.1) # Color Enhancement color = st.sidebar.slider("Adjust Color Intensity", 0.5, 2.0, 1.0, 0.1) # Rotate rotate_angle = st.sidebar.slider("Rotate Image (Degrees)", 0, 360, 0, 15) # Crop Tool st.sidebar.subheader("Crop Tool") crop_active = st.sidebar.checkbox("Enable Cropping") if crop_active: st.sidebar.text("Select Crop Bounds:") crop_left = st.sidebar.slider("Left", 0, image.width, 0) crop_top = st.sidebar.slider("Top", 0, image.height, 0) crop_right = st.sidebar.slider("Right", 0, image.width, image.width) crop_bottom = st.sidebar.slider("Bottom", 0, image.height, image.height) # Flip Options st.sidebar.subheader("Flip") flip_horizontal = st.sidebar.checkbox("Flip Horizontally") flip_vertical = st.sidebar.checkbox("Flip Vertically") # Apply Filters if grayscale: edited_image = edited_image.convert("L") if brightness != 1.0: if edited_image.mode != "RGB": edited_image = edited_image.convert("RGB") enhancer = ImageEnhance.Brightness(edited_image) edited_image = enhancer.enhance(brightness) if color != 1.0: if edited_image.mode != "RGB": edited_image = edited_image.convert("RGB") enhancer = ImageEnhance.Color(edited_image) edited_image = enhancer.enhance(color) if rotate_angle != 0: edited_image = edited_image.rotate(rotate_angle) if crop_active and crop_left < crop_right and crop_top < crop_bottom: edited_image = edited_image.crop((crop_left, crop_top, crop_right, crop_bottom)) if flip_horizontal: edited_image = edited_image.transpose(Image.FLIP_LEFT_RIGHT) if flip_vertical: edited_image = edited_image.transpose(Image.FLIP_TOP_BOTTOM) # Display the edited image st.subheader("Edited Image") st.image(edited_image, caption="Preview of Edited Image", use_column_width=True) # Download button st.sidebar.subheader("Download") if st.sidebar.button("Download Image"): edited_image.save("edited_image.png") with open("edited_image.png", "rb") as file: st.download_button("Download Edited Image", file, file_name="edited_image.png", mime="image/png") if __name__ == "__main__": main()