Spaces:
Build error
Build error
| 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") | |