Spaces:
Runtime error
Runtime error
import streamlit as st | |
from PIL import Image, ImageOps | |
import io | |
from rembg import remove | |
import requests | |
from PIL import Image | |
from io import BytesIO | |
import os | |
from streamlit_cropperjs import st_cropperjs | |
# Function to process the image | |
def process_image(image): | |
print(image) | |
os.makedirs('original', exist_ok=True) | |
os.makedirs('masked', exist_ok=True) | |
image = image.convert("RGB") | |
image.save('original/image.jpg', format = "jpeg") | |
output_path = "masked/image.png" | |
with open(output_path, "wb") as f: | |
input = open('original/image.jpg', 'rb').read() | |
subject = remove(input) | |
f.write(subject) | |
palestine_bg = "https://flagdownload.com/wp-content/uploads/Flag_of_Palestine_Flat_Round-1024x1024.png" | |
background_img = Image.open(BytesIO(requests.get(palestine_bg).content)) | |
background_img.putalpha(160) | |
background_img = background_img.resize((image.width, image.height)) | |
#image = image.resize((background_img.width, background_img.height)) | |
background_img = background_img.convert("RGBA") | |
input_img = Image.open('original/image.jpg') | |
input_img = input_img.convert("RGBA") | |
combined_img = Image.alpha_composite(input_img, background_img) | |
combined_img = combined_img.convert('RGB') | |
# combined_img.save('masked/finale.jpg', format='jpeg') | |
foreground_img = Image.open(output_path) | |
combined_img.paste(foreground_img, (0,0), foreground_img) | |
combined_img = combined_img.convert('RGB') | |
# combined_img.save("masked/background_final.jpg", format="jpeg") | |
return combined_img | |
# Streamlit app | |
def main(): | |
st.title("Watermelon PFP Generator - By Kaito") | |
# Select background image | |
background_img_file = st.file_uploader("Select your image", type=["jpg", "png"]) | |
if background_img_file is not None: | |
background_img_file = background_img_file.read() | |
cropped_pic = st_cropperjs(pic=background_img_file, btn_text="Generate!", key="foo") | |
if cropped_pic: | |
# save the cropped pic | |
cropped_pic = Image.open(io.BytesIO(cropped_pic)) | |
cropped_pic.save("cropped_pic.png") | |
# Load input and background images | |
background_img = cropped_pic | |
# Process the images | |
img = process_image(background_img) | |
# Display the combined image | |
st.image(img, caption="Combined Image", use_column_width=True) | |
img_bytes = BytesIO() | |
img.save(img_bytes, format='PNG') | |
img_bytes = img_bytes.getvalue() | |
# Add a download button | |
st.download_button( | |
label="Download Image", | |
data=img_bytes, | |
file_name="free_palestine.png", | |
mime="image/png", | |
) | |
if __name__ == "__main__": | |
main() |