From cc55bd5330eaf6b9fd2e3c43c0d1d76d45203e54 Mon Sep 17 00:00:00 2001 From: mhdzumair Date: Sun, 24 Mar 2024 00:48:15 +0530 Subject: [PATCH] Add title to sport event posters --- api/main.py | 15 +- db/models.py | 1 + mediafusion_scrapy/spiders/sport_video.py | 1 + resources/fonts/IBMPlexSans-Bold.ttf | Bin 0 -> 175712 bytes utils/poster.py | 176 +++++++++++++++++++--- 5 files changed, 165 insertions(+), 28 deletions(-) create mode 100644 resources/fonts/IBMPlexSans-Bold.ttf diff --git a/api/main.py b/api/main.py index be68185..e59938a 100644 --- a/api/main.py +++ b/api/main.py @@ -1,8 +1,10 @@ +import asyncio import json import logging from io import BytesIO from typing import Literal +import aiohttp import redis.asyncio as redis from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.cron import CronTrigger @@ -437,11 +439,18 @@ async def get_poster( return StreamingResponse( image_byte_io, media_type="image/jpeg", headers=const.DEFAULT_HEADERS ) + except asyncio.TimeoutError: + logging.error("Poster generation timeout.") + raise HTTPException(status_code=404, detail="Poster generation timeout.") + except aiohttp.ClientResponse as e: + logging.error(f"Failed to create poster: {e}, status: {e.status}") + if e.status != 404: + raise HTTPException(status_code=404, detail="Failed to create poster.") except Exception as e: logging.error(f"Unexpected error while creating poster: {e}") - mediafusion_data.is_poster_working = False - await mediafusion_data.save() - raise HTTPException(status_code=404, detail="Failed to create poster.") + mediafusion_data.is_poster_working = False + await mediafusion_data.save() + raise HTTPException(status_code=404, detail="Failed to create poster.") @app.get("/scraper", tags=["scraper"]) diff --git a/db/models.py b/db/models.py index f9025f6..14724a2 100644 --- a/db/models.py +++ b/db/models.py @@ -72,6 +72,7 @@ class MediaFusionMetaData(Document): year: Optional[int] = None poster: Optional[str] = None is_poster_working: Optional[bool] = True + is_add_title_to_poster: Optional[bool] = False background: Optional[str] = None streams: list[Link[TorrentStreams]] type: str diff --git a/mediafusion_scrapy/spiders/sport_video.py b/mediafusion_scrapy/spiders/sport_video.py index fdc2a5c..f3b81a7 100644 --- a/mediafusion_scrapy/spiders/sport_video.py +++ b/mediafusion_scrapy/spiders/sport_video.py @@ -100,6 +100,7 @@ class SportVideoSpider(scrapy.Spider): "website": torrent_page_link, "is_parse_ptn": False, "source": "sport-video.org.ua", + "is_add_title_to_poster": True, "catalog": category, } }, diff --git a/resources/fonts/IBMPlexSans-Bold.ttf b/resources/fonts/IBMPlexSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e5389d833ffadfad83fdea8ff707d149ab6c03f8 GIT binary patch literal 175712 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 OE*Nb}?`#^~uKhnq-os1) literal 0 HcmV?d00001 diff --git a/utils/poster.py b/utils/poster.py index 6b51c8f..e7307b6 100644 --- a/utils/poster.py +++ b/utils/poster.py @@ -1,52 +1,64 @@ +import asyncio +from concurrent.futures import ThreadPoolExecutor from io import BytesIO import aiohttp -from PIL import Image, ImageDraw, ImageFont, UnidentifiedImageError +from PIL import Image, ImageDraw, ImageFont, UnidentifiedImageError, ImageStat from imdb import Cinemagoer from db.models import MediaFusionMetaData from utils import const ia = Cinemagoer() +font_cache = {} +executor = ThreadPoolExecutor(max_workers=4) -async def create_poster(mediafusion_data: MediaFusionMetaData) -> BytesIO: +async def fetch_poster_image(url: str) -> bytes: async with aiohttp.ClientSession() as session: - async with session.get( - mediafusion_data.poster, timeout=10, headers=const.UA_HEADER - ) as response: + async with session.get(url, timeout=10, headers=const.UA_HEADER) as response: response.raise_for_status() - # Check if the response content type is an image if not response.headers["Content-Type"].lower().startswith("image/"): raise ValueError( - f"Unexpected content type: {response.headers['Content-Type']} for URL: {mediafusion_data.poster}" + f"Unexpected content type: {response.headers['Content-Type']} for URL: {url}" ) - content = await response.read() + return await response.read() - # Check if the response content is not empty - if not content: - raise ValueError(f"Empty content for URL: {mediafusion_data.poster}") +# Synchronous function for CPU-bound task: image processing +def process_poster_image( + content: bytes, mediafusion_data: MediaFusionMetaData +) -> BytesIO: try: image = Image.open(BytesIO(content)).convert("RGBA") + image = image.resize((300, 450)) + imdb_rating = None # Assume you fetch this rating elsewhere if needed + + # The add_elements_to_poster function would be synchronous + image = add_elements_to_poster(image, imdb_rating) + if mediafusion_data.is_add_title_to_poster: + # The add_title_to_poster function would also be synchronous + image = add_title_to_poster(image, mediafusion_data.title) + + image = image.convert("RGB") + + byte_io = BytesIO() + image.save(byte_io, "JPEG") + byte_io.seek(0) + + return byte_io except UnidentifiedImageError: raise ValueError(f"Cannot identify image from URL: {mediafusion_data.poster}") - image = image.resize((300, 450)) - imdb_rating = None - if mediafusion_data.id.startswith("tt"): - try: - result = ia.get_movie(mediafusion_data.id[2:], info="main") - imdb_rating = result.get("rating") - except Exception: - pass - image = add_elements_to_poster(image, imdb_rating) - image = image.convert("RGB") +async def create_poster(mediafusion_data: MediaFusionMetaData) -> BytesIO: + content = await fetch_poster_image(mediafusion_data.poster) - byte_io = BytesIO() - image.save(byte_io, "JPEG") - byte_io.seek(0) + loop = asyncio.get_event_loop() + byte_io = await asyncio.wait_for( + loop.run_in_executor(executor, process_poster_image, content, mediafusion_data), + 30, + ) return byte_io @@ -59,7 +71,7 @@ def add_elements_to_poster( # Adding IMDb rating at the bottom left with a semi-transparent background if imdb_rating: - font = ImageFont.truetype("resources/fonts/IBMPlexSans-Medium.ttf", size=24) + font = load_font("resources/fonts/IBMPlexSans-Medium.ttf", 24) imdb_text = f"IMDb: {imdb_rating}/10" # Calculate text bounding box using the draw instance @@ -95,3 +107,117 @@ def add_elements_to_poster( image.paste(watermark, watermark_position, watermark) return image + + +def load_font(font_path, font_size): + if (font_path, font_size) not in font_cache: + font_cache[(font_path, font_size)] = ImageFont.truetype( + font_path, size=font_size + ) + return font_cache[(font_path, font_size)] + + +# Function to split the title into multiple lines +def split_title(title, font, draw, max_width): + lines = [] + words = title.split() + average_character_width = sum( + draw.textbbox((0, 0), char, font=font)[2] for char in set(title) + ) / len(set(title)) + while words: + line = "" + line_width = 0 + while words and line_width + average_character_width <= max_width: + word_width = draw.textbbox((0, 0), words[0], font=font)[2] + if line_width + word_width <= max_width: + line += words.pop(0) + " " + line_width += word_width + average_character_width # Add space width + else: + break + lines.append(line.strip()) + return lines + + +# Function to adjust font size and split title +def adjust_font_and_split(title, font_path, max_width, initial_font_size, draw): + font_size = initial_font_size + font = load_font(font_path, font_size) + lines = split_title(title, font, draw, max_width) + while True: + # Get the bounding box of the last line of text + bbox = draw.textbbox((0, 0), lines[-1], font=font) + text_width = bbox[2] - bbox[0] + if len(lines) > 2 or text_width >= max_width: + font_size -= 1 # Decrease font size by 1 + font = load_font(font_path, font_size) + lines = split_title(title, font, draw, max_width) + else: + break + return lines, font + + +def get_average_color(image, bbox): + # Crop the image to the bounding box + cropped_image = image.crop(bbox) + # Get the average color of the cropped image + stat = ImageStat.Stat(cropped_image) + return stat.mean + + +def text_color_based_on_background(average_color): + # Calculate the perceived brightness of the average color + brightness = sum( + [average_color[i] * v for i, v in enumerate([0.299, 0.587, 0.114])] + ) + if brightness > 128: + return "black", "white" # Dark text, light outline + else: + return "white", "black" # Light text, dark outline + + +# Function to draw text with an outline +def draw_text_with_outline(draw, position, text, font, fill_color, outline_color): + x, y = position + # Slightly thicker outlines can be more performant than multiple thin ones + outline_width = 3 + # Offset coordinates for the outline + outline_offsets = [ + (dx, dy) + for dx in range(-outline_width, outline_width + 1) + for dy in range(-outline_width, outline_width + 1) + if dx or dy + ] + for offset in outline_offsets: + draw.text((x + offset[0], y + offset[1]), text, font=font, fill=outline_color) + draw.text(position, text, font=font, fill=fill_color) + + +def add_title_to_poster(image: Image.Image, title_text: str) -> Image.Image: + draw = ImageDraw.Draw(image) + max_width = image.width - 20 # max width for the text + font_path = "resources/fonts/IBMPlexSans-Bold.ttf" + initial_font_size = 50 # Starting font size which will be adjusted dynamically + + lines, font = adjust_font_and_split( + title_text, font_path, max_width, initial_font_size, draw + ) + + # Calculate the total height of the text block using textbbox + text_block_height = sum(draw.textbbox((0, 0), line, font=font)[3] for line in lines) + + # Starting y position, centered vertically + y = (image.height - text_block_height) // 2 + sample_area = (0, y, image.width, y + text_block_height) + average_color = get_average_color(image, sample_area) + text_color, outline_color = text_color_based_on_background(average_color) + + # Draw each line of text + for line in lines: + bbox = draw.textbbox((0, 0), line, font=font) + line_width = bbox[2] - bbox[0] + line_height = bbox[3] - bbox[1] + x = (image.width - line_width) // 2 # Center horizontally + draw_text_with_outline(draw, (x, y), line, font, text_color, outline_color) + y += line_height # Move y position for next line + + return image