Spaces:
Running
Running
import streamlit as st | |
from PIL import Image, ImageDraw, ImageFont | |
import os | |
def add_text_to_image(image, top_text, bottom_text): | |
draw = ImageDraw.Draw(image) | |
# Load a font; change the path if not working or to use a custom font. | |
font_path = "arial.ttf" | |
font_size = int(image.width / 10) # Dynamic font size based on image width | |
try: | |
font = ImageFont.truetype(font_path, font_size) | |
except: | |
font = ImageFont.load_default() | |
# Helper function to calculate text size | |
def get_text_size(text, font): | |
bbox = draw.textbbox((0, 0), text, font=font) | |
return bbox[2] - bbox[0], bbox[3] - bbox[1] | |
# Top text | |
text_width, text_height = get_text_size(top_text, font) | |
top_text_position = ((image.width - text_width) // 2, 10) | |
draw.text(top_text_position, top_text, font=font, fill="white", stroke_fill="black", stroke_width=2) | |
# Bottom text | |
text_width, text_height = get_text_size(bottom_text, font) | |
bottom_text_position = ((image.width - text_width) // 2, image.height - text_height - 10) | |
draw.text(bottom_text_position, bottom_text, font=font, fill="white", stroke_fill="black", stroke_width=2) | |
return image | |
# Streamlit App Title | |
st.title("Meme Generator") | |
# File uploader for the image | |
uploaded_file = st.file_uploader("Upload an image for your meme:", type=["jpg", "jpeg", "png"]) | |
if uploaded_file: | |
# Load the uploaded image | |
image = Image.open(uploaded_file) | |
# Get user input for captions | |
top_text = st.text_input("Top Text:", "") | |
bottom_text = st.text_input("Bottom Text:", "") | |
# Display the original image | |
st.image(image, caption="Original Image", use_column_width=True) | |
if st.button("Generate Meme"): | |
# Generate meme with captions | |
meme_image = add_text_to_image(image.copy(), top_text, bottom_text) | |
# Display the meme | |
st.image(meme_image, caption="Your Meme", use_column_width=True) | |
# Provide a download link | |
output_path = "meme.png" | |
meme_image.save(output_path) | |
with open(output_path, "rb") as file: | |
btn = st.download_button( | |
label="Download Meme", | |
data=file, | |
file_name="meme.png", | |
mime="image/png" | |
) | |
# Footer | |
st.write("WOW MEMES!!!") |