Spaces:
Sleeping
Sleeping
import streamlit as st | |
import requests | |
import base64 | |
from PIL import Image, ImageOps, ImageDraw | |
from io import BytesIO | |
import re | |
def process_image(image_data, is_base64=False): | |
try: | |
if is_base64: | |
# Remove potential base64 headers (like 'data:image/png;base64,') | |
image_data = re.sub(r"^data:image/\w+;base64,", "", image_data) | |
image_data = base64.b64decode(image_data) | |
image = Image.open(BytesIO(image_data)).convert("RGB") | |
# Convert to negative | |
negative = ImageOps.invert(image) | |
# Draw a red circular dot in the center | |
draw = ImageDraw.Draw(negative) | |
width, height = negative.size | |
dot_radius = max(width, height) // 50 # Dynamic dot size | |
center_x, center_y = width // 2, height // 2 | |
draw.ellipse( | |
(center_x - dot_radius, center_y - dot_radius, center_x + dot_radius, center_y + dot_radius), | |
fill=(255, 0, 0) | |
) | |
return negative | |
except Exception as e: | |
st.error(f"Error processing image: {e}") | |
return None | |
def main(): | |
st.title("Negative Effect for Image") | |
input_method = st.radio("Select Image Input Method:", ("Direct Image URL", "Base64 Image")) | |
img = None # Ensure img is always defined | |
if input_method == "Direct Image URL": | |
image_url = st.text_input("Enter Image URL:") | |
if image_url: | |
try: | |
response = requests.get(image_url, stream=True) | |
response.raise_for_status() | |
img = process_image(response.content) | |
except Exception as e: | |
st.error(f"Error fetching image: {e}") | |
elif input_method == "Base64 Image": | |
base64_image = st.text_area("Enter Base64 Encoded Image:") | |
if base64_image.strip(): | |
try: | |
img = process_image(base64_image, is_base64=True) | |
except Exception as e: | |
st.error(f"Error processing base64 image: {e}") | |
if img is not None: | |
st.image(img, caption="Processed Image", use_column_width=True) | |
else: | |
st.warning("Please provide a valid image input.") | |
if __name__ == "__main__": | |
main() | |