Spaces:
Runtime error
Runtime error
Download app.py from awacke1/MemeGenerator: direct link, hf CLI and curl.
- Browser
- Download file 2.48 kB
-
https://huggingface.co/spaces/awacke1/MemeGenerator/resolve/main/app.py
- Command line
-
hf download hf://spaces/awacke1/MemeGenerator/app.py
-
curl -L -o app.py https://huggingface.co/spaces/awacke1/MemeGenerator/resolve/main/app.py
2.48 kB
| import streamlit as st | |
| from PIL import Image, ImageDraw, ImageFont | |
| import io | |
| import base64 | |
| from datetime import datetime | |
| def calculate_font_size(img_width, img_height, text): | |
| max_font_size = int(img_width * 0.1) | |
| min_font_size = int(img_width * 0.02) | |
| if len(text) < 5: | |
| return max_font_size | |
| elif len(text) < 20: | |
| return int((max_font_size + min_font_size) / 2) | |
| else: | |
| return min_font_size | |
| def generate_meme(img_path, top_text, middle_text, bottom_text): | |
| img = Image.open(img_path) | |
| draw = ImageDraw.Draw(img) | |
| font_path = "Nasa21-l23X.ttf" | |
| font_size_top = calculate_font_size(img.width, img.height, top_text) | |
| font_size_middle = calculate_font_size(img.width, img.height, middle_text) | |
| font_size_bottom = calculate_font_size(img.width, img.height, bottom_text) | |
| font_top = ImageFont.truetype(font_path, font_size_top) | |
| font_middle = ImageFont.truetype(font_path, font_size_middle) | |
| font_bottom = ImageFont.truetype(font_path, font_size_bottom) | |
| draw.text((10,10), top_text, font=font_top, fill="white") | |
| draw.text((10,img.height // 2 - font_size_middle // 2), middle_text, font=font_middle, fill="white") | |
| draw.text((10,img.height - 10 - font_size_bottom), bottom_text, font=font_bottom, fill="white") | |
| return img | |
| def get_image_download_link(img, filename="meme.png"): | |
| buffered = io.BytesIO() | |
| img.save(buffered, format="PNG") | |
| img_str = base64.b64encode(buffered.getvalue()).decode() | |
| href = f'<a href="data:image/png;base64,{img_str}" download="{filename}">Download Image</a>' | |
| return href | |
| st.title("Meme Generator") | |
| uploaded_file = st.file_uploader("Upload an image", type=["jpg", "png"]) | |
| if uploaded_file is not None: | |
| st.image(uploaded_file, caption='Uploaded Image.', use_column_width=True) | |
| top_text = st.text_input("Enter top text") | |
| middle_text = st.text_input("Enter middle text") | |
| bottom_text = st.text_input("Enter bottom text") | |
| if st.button("Generate Meme"): | |
| result_img = generate_meme(uploaded_file, top_text, middle_text, bottom_text) | |
| filename = datetime.now().strftime('%Y%m%d%H%M%S') + ".png" | |
| st.image(result_img, caption='Generated Meme', use_column_width=True) | |
| st.markdown(get_image_download_link(result_img, filename), unsafe_allow_html=True) | |
| # References | |
| st.write("### References:") | |
| st.write(f"- [DOI](https://doi.org/10.57967/hf/0428)") | |
| #st.write(f"- [arXiv](https://arxiv.org/abs/1910.09700)") | |