import base64 import traceback from typing import List, Union import aiohttp import filetype as ft import ujson as json from PIL import Image as PImage from aiofile import async_open from config import CFG from core.builtins import Plain, Image, Voice, Embed, MessageChain, MessageSession from core.logger import Logger from core.utils.cache import random_cache_path from core.utils.http import download_to_cache web_render = CFG.get_url('web_render') web_render_local = CFG.get_url('web_render_local') async def image_split(i: Image) -> List[Image]: i = PImage.open(await i.get()) iw, ih = i.size if ih <= 1500: return [Image(i)] _h = 0 i_list = [] for x in range((ih // 1500) + 1): if _h + 1500 > ih: crop_h = ih else: crop_h = _h + 1500 i_list.append(Image(i.crop((0, _h, iw, crop_h)))) _h = crop_h return i_list save_source = True async def msgchain2image(message_chain: Union[List, MessageChain], msg: MessageSession = None, use_local=True): if not web_render_local: if not web_render: Logger.warn('[Webrender] Webrender is not configured.') return False use_local = False if isinstance(message_chain, List): message_chain = MessageChain(message_chain) lst = [] html_template = """