Image_Editor / app.py
mishiawan's picture
Update app.py
706010f verified
import streamlit as st
from PIL import Image, ImageEnhance, ImageFilter
import numpy as np
import io
# Function to apply filters
def apply_filter(img, filter_name, value):
if filter_name == 'Grayscale':
return img.convert("L")
elif filter_name == 'Blur':
return img.filter(ImageFilter.GaussianBlur(radius=value))
elif filter_name == 'Magic Eraser':
img = np.array(img)
img[img == 255] = 0 # Magic Eraser: remove white pixels
return Image.fromarray(img)
elif filter_name == 'Sharpness':
enhancer = ImageEnhance.Sharpness(img)
return enhancer.enhance(value)
elif filter_name == 'Contrast':
enhancer = ImageEnhance.Contrast(img)
return enhancer.enhance(value)
elif filter_name == 'Saturation':
enhancer = ImageEnhance.Color(img)
return enhancer.enhance(value)
elif filter_name == 'Brightness':
enhancer = ImageEnhance.Brightness(img)
return enhancer.enhance(value)
elif filter_name == 'Tint':
img = np.array(img)
img = np.clip(img + (value * 50), 0, 255)
return Image.fromarray(img)
else:
return img
def crop_image(img, left, top, right, bottom):
return img.crop((left, top, right, bottom))
# Streamlit UI components
st.title('Image Editor')
# Upload Image
uploaded_file = st.file_uploader("Upload Image", type=["jpg", "png", "jpeg"])
if uploaded_file is not None:
# Open the uploaded image
img = Image.open(uploaded_file)
# Create two columns for side-by-side display
col1, col2 = st.columns(2)
# Display the original image in the first column
with col1:
st.image(img, caption="Uploaded Image", use_column_width=True)
# Filter options
filter_name = st.selectbox("Choose a filter",
["None", "Grayscale", "Blur", "Magic Eraser", "Sharpness", "Contrast", "Saturation", "Brightness", "Tint"])
if filter_name in ["Blur", "Sharpness", "Contrast", "Saturation", "Brightness"]:
value = st.slider(f"Adjust {filter_name}", 0.0, 2.0, 1.0)
elif filter_name == "Tint":
value = st.slider("Adjust Tint", -1.0, 1.0, 0.0)
else:
value = 0
if filter_name != "None":
img = apply_filter(img, filter_name, value)
# Cropping
st.write("Crop Image")
left = st.slider("Left", 0, img.width, 0)
top = st.slider("Top", 0, img.height, 0)
right = st.slider("Right", 0, img.width, img.width)
bottom = st.slider("Bottom", 0, img.height, img.height)
img = crop_image(img, left, top, right, bottom)
# Display updated image after all adjustments in the second column
with col2:
st.image(img, caption="Edited Image", use_column_width=True)
# Download the edited image
buffer = io.BytesIO()
img.save(buffer, format="PNG")
buffer.seek(0)
st.download_button(label="Download Image", data=buffer, file_name="edited_image.png", mime="image/png")