Fa1dz's picture
Duplicate from flax-community/chef-transformer
e734794
from PIL import (
Image,
ImageDraw
)
import textwrap
from utils.utils import load_image_from_url
from utils.ext import (
ingredients as ext_ingredients,
directions as ext_directions
)
# from .utils import load_image_from_url
# from .ext import (
# ingredients as ext_ingredients,
# directions as ext_directions
# )
def generate_food_with_logo_image(bg_path, logo_path, food_url, no_food="asset/frame/no_food.png"):
bg = Image.open(bg_path)
width, height = bg.size
logo = Image.open(logo_path)
logo_width, logo_height, logo_ratio, logo_rb, logo_mb = logo.size + (3, -20, 45)
logo_width, logo_height = (logo_width // logo_ratio, logo_height // logo_ratio)
logo = logo.resize((logo_width, logo_height))
food = load_image_from_url(food_url, rgba_mode=True, default_image=no_food)
food_width, food_height = (300, 300)
food = food.resize((food_width, food_height))
bg.paste(food, (0, 0), food)
bg.paste(logo, (width - logo_width - logo_rb, height - logo_height - logo_mb), logo)
return bg
def generate_recipe_image(
recipe_data,
bg_path,
food_logo_ia,
fonts,
bg_color="#ffffff"
):
bg = Image.open(bg_path)
bg.paste(food_logo_ia, (50, 50), food_logo_ia)
bg_color = Image.new("RGBA", bg.size, bg_color)
bg_color.paste(bg, mask=bg)
im_editable = ImageDraw.Draw(bg_color)
im_editable.text(
(418, 30),
textwrap.fill(recipe_data["title"], 15).replace(" \n", "\n"),
(61, 61, 70),
font=fonts["title"],
)
im_editable.text(
(100, 450),
"Ingredients",
(61, 61, 70),
font=fonts["body_bold"],
)
ingredients = recipe_data["ingredients"]
ingredients = ext_ingredients(ingredients, [], without_mapping=True)
ingredients = [textwrap.fill(item, 30).replace("\n", "\n ") for item in ingredients]
im_editable.text(
(50, 520),
"\n".join([f"- {item}" for item in ingredients]),
(61, 61, 70),
font=fonts["body"],
)
im_editable.text(
(700, 450),
"Directions",
(61, 61, 70),
font=fonts["body_bold"],
)
directions = recipe_data["directions"]
directions = ext_directions(directions)
directions = [textwrap.fill(item, 70).replace("\n", "\n ").capitalize() for item in directions]
im_editable.text(
(430, 520),
"\n".join([f"{i + 1}. {item}" for i, item in enumerate(directions)]).strip(),
(61, 61, 70),
font=fonts["body"],
)
return bg_color