ImageEditorapp / app.py
meetfahad1's picture
Update app.py
a2daaf1 verified
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()