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 Config from core.builtins import Plain, Image, Voice, Embed from core.logger import Logger from core.types.message.chain import MessageChain from core.utils.cache import random_cache_path from core.utils.http import download_to_cache web_render = Config('web_render') web_render_local = Config('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(msgchain: Union[List, MessageChain], 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(msgchain, List): msgchain = MessageChain(msgchain) lst = [] html_template = """