From f43dead6b66fb557355a664fe7ca4772a7c5c4dc Mon Sep 17 00:00:00 2001 From: Zhalslar Date: Sun, 28 Sep 2025 02:07:48 +0800 Subject: [PATCH] =?UTF-8?q?enhance:=20=E5=85=A8=E9=9D=A2=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E6=B8=B2=E6=9F=93=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/utils/io.py | 63 +- astrbot/core/utils/t2i/local_strategy.py | 940 +-------- astrbot/core/utils/t2i/pillowmd/__init__.py | 13 + astrbot/core/utils/t2i/pillowmd/decorates.py | 240 +++ astrbot/core/utils/t2i/pillowmd/drawer.py | 421 ++++ astrbot/core/utils/t2i/pillowmd/mdrenderer.py | 1787 +++++++++++++++++ astrbot/core/utils/t2i/pillowmd/mixfont.py | 97 + astrbot/core/utils/t2i/pillowmd/style.py | 180 ++ astrbot/core/utils/t2i/renderer.py | 27 +- .../t2i/style/base/backgrounds/1.2.200.png | Bin 0 -> 11296 bytes .../t2i/style/base/backgrounds/2.2.200.png | Bin 0 -> 1958 bytes .../t2i/style/base/backgrounds/2.3.200.png | Bin 0 -> 3009 bytes .../utils/t2i/style/base/backgrounds/2.aa.png | Bin 0 -> 2507 bytes .../t2i/style/base/backgrounds/3.2.200.png | Bin 0 -> 5150 bytes .../t2i/style/base/backgrounds/4.2.200.png | Bin 0 -> 2146 bytes .../t2i/style/base/backgrounds/4.3.200.png | Bin 0 -> 3230 bytes .../t2i/style/base/backgrounds/5.2.200.png | Bin 0 -> 2147 bytes .../t2i/style/base/backgrounds/5.3.200.png | Bin 0 -> 3245 bytes .../t2i/style/base/backgrounds/6.2.200.png | Bin 0 -> 4885 bytes .../t2i/style/base/backgrounds/7.2.200.png | Bin 0 -> 1978 bytes .../t2i/style/base/backgrounds/7.3.200.png | Bin 0 -> 3046 bytes .../t2i/style/base/backgrounds/8.2.200.png | Bin 0 -> 4344 bytes .../t2i/style/base/backgrounds/9.2.200.png | Bin 0 -> 1305 bytes astrbot/core/utils/t2i/style/base/paint.png | Bin 0 -> 633829 bytes .../core/utils/t2i/style/base/setting.yaml | 149 ++ astrbot/core/utils/t2i/style_manager.py | 142 ++ 26 files changed, 3104 insertions(+), 955 deletions(-) create mode 100644 astrbot/core/utils/t2i/pillowmd/__init__.py create mode 100644 astrbot/core/utils/t2i/pillowmd/decorates.py create mode 100644 astrbot/core/utils/t2i/pillowmd/drawer.py create mode 100644 astrbot/core/utils/t2i/pillowmd/mdrenderer.py create mode 100644 astrbot/core/utils/t2i/pillowmd/mixfont.py create mode 100644 astrbot/core/utils/t2i/pillowmd/style.py create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/1.2.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/2.2.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/2.3.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/2.aa.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/3.2.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/4.2.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/4.3.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/5.2.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/5.3.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/6.2.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/7.2.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/7.3.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/8.2.200.png create mode 100644 astrbot/core/utils/t2i/style/base/backgrounds/9.2.200.png create mode 100644 astrbot/core/utils/t2i/style/base/paint.png create mode 100644 astrbot/core/utils/t2i/style/base/setting.yaml create mode 100644 astrbot/core/utils/t2i/style_manager.py diff --git a/astrbot/core/utils/io.py b/astrbot/core/utils/io.py index 723953f8f..eb307fd74 100644 --- a/astrbot/core/utils/io.py +++ b/astrbot/core/utils/io.py @@ -52,33 +52,51 @@ def port_checker(port: int, host: str = "localhost"): return False -def save_temp_img(img: Union[Image.Image, str]) -> str: - temp_dir = os.path.join(get_astrbot_data_path(), "temp") - # 获得文件创建时间,清除超过 12 小时的 +def save_temp_img(img: Union[Image.Image, bytes], save_name: str | None = None) -> str: + """ + 保存临时图片: + - 自动清理超过 12 小时的临时文件 + - 如果提供了 save_name(含扩展名),直接用作文件名;否则按规则自动生成 + - 根据图片模式自动选择保存格式(RGBA -> PNG,其余 -> JPG) + """ + temp_dir = Path(get_astrbot_data_path()) / "temp" + temp_dir.mkdir(parents=True, exist_ok=True) + + # 清理超过 12 小时的旧文件 + now = time.time() try: - for f in os.listdir(temp_dir): - path = os.path.join(temp_dir, f) - if os.path.isfile(path): - ctime = os.path.getctime(path) - if time.time() - ctime > 3600 * 12: - os.remove(path) + for f in temp_dir.iterdir(): + if f.is_file() and now - f.stat().st_ctime > 3600 * 12: + f.unlink(missing_ok=True) except Exception as e: print(f"清除临时文件失败: {e}") - # 获得时间戳 - timestamp = f"{int(time.time())}_{uuid.uuid4().hex[:8]}" - p = os.path.join(temp_dir, f"{timestamp}.jpg") + # 决定文件名 + if save_name: # 外部指定了名字 + file_name = save_name + path = temp_dir / file_name + else: # 自动生成 + timestamp = f"{int(now)}_{uuid.uuid4().hex[:8]}" + if isinstance(img, Image.Image) and img.mode in ("RGBA", "LA"): + file_name = f"{timestamp}.png" + else: + file_name = f"{timestamp}.jpg" + path = temp_dir / file_name + # 保存文件 if isinstance(img, Image.Image): - img.save(p) - else: - with open(p, "wb") as f: - f.write(img) - return p + if path.suffix.lower() == ".png" or img.mode in ("RGBA", "LA"): + img.save(path, format="PNG") + else: + img.convert("RGB").save(path, format="JPEG", quality=95) + else: # bytes + path.write_bytes(img) + + return str(path) async def download_image_by_url( - url: str, post: bool = False, post_data: dict = None, path=None + url: str, post: bool = False, post_data: dict = None, path=None, save_name=None ) -> str: """ 下载图片, 返回 path @@ -94,7 +112,7 @@ async def download_image_by_url( if post: async with session.post(url, json=post_data) as resp: if not path: - return save_temp_img(await resp.read()) + return save_temp_img(await resp.read(), save_name) else: with open(path, "wb") as f: f.write(await resp.read()) @@ -102,7 +120,7 @@ async def download_image_by_url( else: async with session.get(url) as resp: if not path: - return save_temp_img(await resp.read()) + return save_temp_img(await resp.read(), save_name) else: with open(path, "wb") as f: f.write(await resp.read()) @@ -114,14 +132,13 @@ async def download_image_by_url( async with aiohttp.ClientSession() as session: if post: async with session.get(url, ssl=ssl_context) as resp: - return save_temp_img(await resp.read()) + return save_temp_img(await resp.read(), save_name) else: async with session.get(url, ssl=ssl_context) as resp: - return save_temp_img(await resp.read()) + return save_temp_img(await resp.read(), save_name) except Exception as e: raise e - async def download_file(url: str, path: str, show_progress: bool = False): """ 从指定 url 下载文件到指定路径 path diff --git a/astrbot/core/utils/t2i/local_strategy.py b/astrbot/core/utils/t2i/local_strategy.py index 19eab2efe..ed543b04c 100644 --- a/astrbot/core/utils/t2i/local_strategy.py +++ b/astrbot/core/utils/t2i/local_strategy.py @@ -1,932 +1,28 @@ -import re -import os -import aiohttp -import ssl -import certifi -from io import BytesIO -from typing import List, Tuple -from abc import ABC, abstractmethod -from astrbot.core.config import VERSION -from . import RenderStrategy -from PIL import ImageFont, Image, ImageDraw from astrbot.core.utils.io import save_temp_img -from astrbot.core.utils.astrbot_path import get_astrbot_data_path - - -class FontManager: - """字体管理类,负责加载和缓存字体""" - - _font_cache = {} - - @classmethod - def get_font(cls, size: int) -> ImageFont.FreeTypeFont: - """获取指定大小的字体,优先从缓存获取""" - if size in cls._font_cache: - return cls._font_cache[size] - - # 首先尝试加载自定义字体 - try: - font_path = os.path.join(get_astrbot_data_path(), "font.ttf") - font = ImageFont.truetype(font_path, size) - cls._font_cache[size] = font - return font - except Exception: - pass - - # 跨平台常见字体列表 - fonts = [ - "msyh.ttc", # Windows - "NotoSansCJK-Regular.ttc", # Linux - "msyhbd.ttc", # Windows - "PingFang.ttc", # macOS - "Heiti.ttc", # macOS - "Arial.ttf", # 通用 - "DejaVuSans.ttf", # Linux - ] - - for font_name in fonts: - try: - font = ImageFont.truetype(font_name, size) - cls._font_cache[size] = font - return font - except Exception: - continue - - # 如果所有字体都失败,使用默认字体 - try: - default_font = ImageFont.load_default() - # PIL默认字体大小固定,这里不缓存 - return default_font - except Exception: - raise RuntimeError("无法加载任何字体") - - -class TextMeasurer: - """测量文本尺寸的工具类""" - - @staticmethod - def get_text_size(text: str, font: ImageFont.FreeTypeFont) -> Tuple[int, int]: - """获取文本的尺寸""" - try: - # PIL 9.0.0 以上版本 - return ( - font.getbbox(text)[2:] - if hasattr(font, "getbbox") - else font.getsize(text) - ) - except Exception: - # 兼容旧版本 - return font.getsize(text) - - @staticmethod - def split_text_to_fit_width( - text: str, font: ImageFont.FreeTypeFont, max_width: int - ) -> List[str]: - """将文本拆分为多行,确保每行不超过指定宽度""" - lines = [] - if not text: - return lines - - remaining_text = text - while remaining_text: - # 如果文本宽度小于最大宽度,直接添加 - text_width = TextMeasurer.get_text_size(remaining_text, font)[0] - if text_width <= max_width: - lines.append(remaining_text) - break - - # 尝试逐字计算能放入当前行的最多字符 - for i in range(len(remaining_text), 0, -1): - width = TextMeasurer.get_text_size(remaining_text[:i], font)[0] - if width <= max_width: - lines.append(remaining_text[:i]) - remaining_text = remaining_text[i:] - break - else: - # 如果单个字符都放不下,强制放一个字符 - lines.append(remaining_text[0]) - remaining_text = remaining_text[1:] - - return lines - - -class MarkdownElement(ABC): - """Markdown元素的基类""" - - def __init__(self, content: str): - self.content = content - - @abstractmethod - def calculate_height(self, image_width: int, font_size: int) -> int: - """计算元素的高度""" - pass - - @abstractmethod - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - """渲染元素到图像,返回新的y坐标""" - pass - - -class TextElement(MarkdownElement): - """普通文本元素""" - - def calculate_height(self, image_width: int, font_size: int) -> int: - if not self.content.strip(): - return 10 # 空行高度 - - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - return len(lines) * (font_size + 8) - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - if not self.content.strip(): - return y + 10 # 空行 - - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - - for line in lines: - draw.text((x, y), line, font=font, fill=(0, 0, 0)) - y += font_size + 8 - - return y - - -class BoldTextElement(MarkdownElement): - """粗体文本元素""" - - def calculate_height(self, image_width: int, font_size: int) -> int: - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - return len(lines) * (font_size + 8) - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - # 尝试使用粗体字体,如果没有则绘制两次模拟粗体效果 - try: - bold_fonts = [ - "msyhbd.ttc", # 微软雅黑粗体 (Windows) - "Arial-Bold.ttf", # Arial粗体 - "DejaVuSans-Bold.ttf", # Linux粗体 - ] - - bold_font = None - for font_name in bold_fonts: - try: - bold_font = ImageFont.truetype(font_name, font_size) - break - except Exception: - continue - - if bold_font: - lines = TextMeasurer.split_text_to_fit_width( - self.content, bold_font, image_width - 20 - ) - for line in lines: - draw.text((x, y), line, font=bold_font, fill=(0, 0, 0)) - y += font_size + 8 - else: - # 如果没有粗体字体,则绘制两次文本轻微偏移以模拟粗体 - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - for line in lines: - draw.text((x, y), line, font=font, fill=(0, 0, 0)) - draw.text((x + 1, y), line, font=font, fill=(0, 0, 0)) - y += font_size + 8 - except Exception: - # 兜底方案:使用普通字体 - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - for line in lines: - draw.text((x, y), line, font=font, fill=(0, 0, 0)) - y += font_size + 8 - - return y - - -class ItalicTextElement(MarkdownElement): - """斜体文本元素""" - - def calculate_height(self, image_width: int, font_size: int) -> int: - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - return len(lines) * (font_size + 8) - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - # 尝试使用斜体字体,如果没有则使用倾斜变换模拟斜体效果 - try: - italic_fonts = [ - "msyhi.ttc", # 微软雅黑斜体 (Windows) - "Arial-Italic.ttf", # Arial斜体 - "DejaVuSans-Oblique.ttf", # Linux斜体 - ] - - italic_font = None - for font_name in italic_fonts: - try: - italic_font = ImageFont.truetype(font_name, font_size) - break - except Exception: - continue - - if italic_font: - lines = TextMeasurer.split_text_to_fit_width( - self.content, italic_font, image_width - 20 - ) - for line in lines: - draw.text((x, y), line, font=italic_font, fill=(0, 0, 0)) - y += font_size + 8 - else: - # 如果没有斜体字体,使用变换 - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - - for line in lines: - # 先创建一个临时图像用于倾斜处理 - text_width, text_height = TextMeasurer.get_text_size(line, font) - text_img = Image.new( - "RGBA", (text_width + 20, text_height + 10), (0, 0, 0, 0) - ) - text_draw = ImageDraw.Draw(text_img) - text_draw.text((0, 0), line, font=font, fill=(0, 0, 0, 255)) - - # 倾斜变换,使用仿射变换实现斜体效果 - # 变换矩阵: [1, 0.2, 0, 0, 1, 0] - italic_img = text_img.transform( - text_img.size, Image.AFFINE, (1, 0.2, 0, 0, 1, 0), Image.BICUBIC - ) - - # 粘贴到原图像 - image.paste(italic_img, (x, y), italic_img) - y += font_size + 8 - except Exception: - # 兜底方案:使用普通字体 - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - for line in lines: - draw.text((x, y), line, font=font, fill=(0, 0, 0)) - y += font_size + 8 - - return y - - -class UnderlineTextElement(MarkdownElement): - """下划线文本元素""" - - def calculate_height(self, image_width: int, font_size: int) -> int: - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - return len(lines) * (font_size + 8) - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - - for line in lines: - # 绘制文本 - draw.text((x, y), line, font=font, fill=(0, 0, 0)) - - # 绘制下划线 - text_width, _ = TextMeasurer.get_text_size(line, font) - underline_y = y + font_size + 2 - draw.line( - (x, underline_y, x + text_width, underline_y), fill=(0, 0, 0), width=1 - ) - - y += font_size + 8 - - return y - - -class StrikethroughTextElement(MarkdownElement): - """删除线文本元素""" - - def calculate_height(self, image_width: int, font_size: int) -> int: - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - return len(lines) * (font_size + 8) - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - - for line in lines: - # 绘制文本 - draw.text((x, y), line, font=font, fill=(0, 0, 0)) - - # 绘制删除线 - text_width, _ = TextMeasurer.get_text_size(line, font) - strike_y = y + font_size // 2 - draw.line((x, strike_y, x + text_width, strike_y), fill=(0, 0, 0), width=1) - - y += font_size + 8 - - return y - - -class HeaderElement(MarkdownElement): - """标题元素""" - - def __init__(self, content: str): - # 去除开头的 # 并计算级别 - level = 0 - for char in content: - if char == "#": - level += 1 - else: - break - - super().__init__(content[level:].strip()) - self.level = min(level, 6) # h1-h6 - - def calculate_height(self, image_width: int, font_size: int) -> int: - header_font_size = 42 - (self.level - 1) * 4 - font = FontManager.get_font(header_font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 20 - ) - return len(lines) * header_font_size + 30 # 包含上下间距和分隔线 - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - header_font_size = 42 - (self.level - 1) * 4 - font = FontManager.get_font(header_font_size) - - y += 10 # 上间距 - draw.text((x, y), self.content, font=font, fill=(0, 0, 0)) - - # 添加分隔线 - y += header_font_size + 8 - draw.line((x, y, image_width - 10, y), fill=(230, 230, 230), width=3) - - return y + 10 # 返回包含下间距的新y坐标 - - -class QuoteElement(MarkdownElement): - """引用元素""" - - def __init__(self, content: str): - # 去除开头的 > - super().__init__(content[1:].strip()) - - def calculate_height(self, image_width: int, font_size: int) -> int: - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 30 - ) # 左边留出引用线的空间 - return len(lines) * (font_size + 6) + 12 # 包含上下间距 - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 30 - ) - - total_height = len(lines) * (font_size + 6) - - # 绘制引用线 - quote_line_x = x + 3 - draw.line( - (quote_line_x, y + 6, quote_line_x, y + total_height + 6), - fill=(180, 180, 180), - width=5, - ) - - # 绘制文本 - text_x = x + 15 - text_y = y + 6 - for line in lines: - draw.text((text_x, text_y), line, font=font, fill=(180, 180, 180)) - text_y += font_size + 6 - - return y + total_height + 12 - - -class ListItemElement(MarkdownElement): - """列表项元素""" - - def calculate_height(self, image_width: int, font_size: int) -> int: - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 30 - ) # 左边留出项目符号的空间 - return len(lines) * (font_size + 6) + 16 # 包含上下间距 - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - font = FontManager.get_font(font_size) - lines = TextMeasurer.split_text_to_fit_width( - self.content, font, image_width - 30 - ) - - y += 8 # 上间距 - - # 绘制项目符号 - bullet_x = x + 5 - draw.text((bullet_x, y), "•", font=font, fill=(0, 0, 0)) - - # 绘制文本 - text_x = x + 25 - text_y = y - for line in lines: - draw.text((text_x, text_y), line, font=font, fill=(0, 0, 0)) - text_y += font_size + 6 - - return text_y + 8 # 包含下间距 - - -class CodeBlockElement(MarkdownElement): - """代码块元素""" - - def __init__(self, content: List[str]): - super().__init__("\n".join(content)) - - def calculate_height(self, image_width: int, font_size: int) -> int: - if not self.content: - return 40 # 空代码块的最小高度 - - font = FontManager.get_font(font_size) - lines = self.content.split("\n") - wrapped_lines = [] - - for line in lines: - wrapped = TextMeasurer.split_text_to_fit_width(line, font, image_width - 40) - wrapped_lines.extend(wrapped) - - return len(wrapped_lines) * (font_size + 4) + 40 # 包含内边距和上下间距 - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - font = FontManager.get_font(font_size) - lines = self.content.split("\n") - wrapped_lines = [] - - for line in lines: - wrapped = TextMeasurer.split_text_to_fit_width(line, font, image_width - 40) - wrapped_lines.extend(wrapped) - - content_height = len(wrapped_lines) * (font_size + 4) - total_height = content_height + 30 # 包含内边距 - - # 绘制背景 - draw.rounded_rectangle( - (x, y + 5, image_width - 10, y + total_height), - radius=5, - fill=(240, 240, 240), - width=1, - ) - - # 绘制代码 - text_y = y + 15 - for line in wrapped_lines: - draw.text((x + 15, text_y), line, font=font, fill=(0, 0, 0)) - text_y += font_size + 4 - - return y + total_height + 10 - - -class InlineCodeElement(MarkdownElement): - """行内代码元素""" - - def calculate_height(self, image_width: int, font_size: int) -> int: - return font_size + 16 # 包含内边距和上下间距 - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - font = FontManager.get_font(font_size) - - # 计算文本大小 - text_width, _ = TextMeasurer.get_text_size(self.content, font) - text_height = font_size - - # 绘制背景 - padding = 4 - draw.rounded_rectangle( - (x, y + 4, x + text_width + padding * 2, y + text_height + padding * 2 + 4), - radius=5, - fill=(230, 230, 230), - width=1, - ) - - # 绘制文本 - draw.text( - (x + padding, y + padding + 4), self.content, font=font, fill=(0, 0, 0) - ) - - return y + text_height + 16 # 返回新的y坐标 - - -class ImageElement(MarkdownElement): - """图片元素""" - - def __init__(self, content: str, image_url: str): - super().__init__(content) - self.image_url = image_url - self.image = None - - async def load_image(self): - """加载图片""" - try: - ssl_context = ssl.create_default_context(cafile=certifi.where()) - connector = aiohttp.TCPConnector(ssl=ssl_context) - - async with aiohttp.ClientSession( - trust_env=True, connector=connector - ) as session: - async with session.get(self.image_url) as resp: - if resp.status == 200: - image_data = await resp.read() - self.image = Image.open(BytesIO(image_data)) - else: - print(f"Failed to load image: HTTP {resp.status}") - except Exception as e: - print(f"Failed to load image: {e}") - - def calculate_height(self, image_width: int, font_size: int) -> int: - if self.image is None: - return font_size + 20 # 图片加载失败的默认高度 - - # 计算调整大小后的图片高度 - max_width = image_width * 0.8 - if self.image.width > max_width: - ratio = max_width / self.image.width - height = int(self.image.height * ratio) - else: - height = self.image.height - - return height + 30 # 包含上下间距 - - def render( - self, - image: Image.Image, - draw: ImageDraw.Draw, - x: int, - y: int, - image_width: int, - font_size: int, - ) -> int: - if self.image is None: - # 图片加载失败 - font = FontManager.get_font(font_size) - draw.text((x, y + 10), "[图片加载失败]", font=font, fill=(255, 0, 0)) - return y + font_size + 20 - - # 调整图片大小 - max_width = image_width * 0.8 - pasted_image = self.image - - if pasted_image.width > max_width: - ratio = max_width / pasted_image.width - new_size = (int(max_width), int(pasted_image.height * ratio)) - pasted_image = pasted_image.resize(new_size, Image.LANCZOS) - - # 计算居中位置 - paste_x = x + (image_width - pasted_image.width) // 2 - 10 - - # 粘贴图片 - if pasted_image.mode == "RGBA": - # 处理透明图片 - image.paste(pasted_image, (paste_x, y + 15), pasted_image) - else: - image.paste(pasted_image, (paste_x, y + 15)) - - return y + pasted_image.height + 30 - - -class MarkdownParser: - """Markdown解析器,将文本解析为元素""" - - @staticmethod - async def parse(text: str) -> List[MarkdownElement]: - elements = [] - lines = text.split("\n") - - i = 0 - while i < len(lines): - line = lines[i].rstrip() - - # 图片检测 - image_match = re.search(r"!\s*\[(.*?)\]\s*\((.*?)\)", line) - if image_match: - image_url = image_match.group(2) - element = ImageElement(line, image_url) - await element.load_image() - elements.append(element) - i += 1 - continue - - # 标题 - if line.startswith("#"): - elements.append(HeaderElement(line)) - i += 1 - continue - - # 引用 - if line.startswith(">"): - elements.append(QuoteElement(line)) - i += 1 - continue - - # 列表项 - if line.startswith("-") or line.startswith("*"): - elements.append(ListItemElement(line[1:].strip())) - i += 1 - continue - - # 代码块 - if line.startswith("```"): - code_lines = [] - i += 1 # 跳过开始标记行 - - while i < len(lines) and not lines[i].startswith("```"): - code_lines.append(lines[i]) - i += 1 - - i += 1 # 跳过结束标记行 - elements.append(CodeBlockElement(code_lines)) - continue - - # 检查行内样式(粗体、斜体、下划线、删除线、行内代码) - if re.search( - r"(\*\*.*?\*\*)|(\*.*?\*)|(__.*?__)|(_.*?_)|(~~.*?~~)|(`.*?`)", line - ): - # 分析行内样式: - # - 粗体: **text** 或 __text__ - # - 斜体: *text* 或 _text_ - # - 删除线: ~~text~~ - # - 行内代码: `text` - - # 定义正则模式和对应的元素类型 - patterns = [ - (r"\*\*(.*?)\*\*", BoldTextElement), # **粗体** - (r"__(.*?)__", BoldTextElement), # __粗体__ - ( - r"\*((?!\*\*).*?)\*", - ItalicTextElement, - ), # *斜体* (但不匹配 ** 开头) - (r"_((?!__).*?)_", ItalicTextElement), # _斜体_ (但不匹配 __ 开头) - (r"~~(.*?)~~", StrikethroughTextElement), # ~~删除线~~ - (r"__(.*?)__", UnderlineTextElement), # __下划线__ - (r"`(.*?)`", InlineCodeElement), # `行内代码` - ] - - # 创建标记位置列表 - markers = [] - for pattern, element_class in patterns: - for match in re.finditer(pattern, line): - markers.append( - { - "start": match.start(), - "end": match.end(), - "text": match.group(1), # 提取内容部分 - "element_class": element_class, - } - ) - - # 按开始位置排序 - markers.sort(key=lambda x: x["start"]) - - # 如果没有找到任何匹配,直接添加为普通文本 - if not markers: - elements.append(TextElement(line)) - i += 1 - continue - - # 处理每个文本片段 - current_pos = 0 - for marker in markers: - # 添加前面的普通文本 - if marker["start"] > current_pos: - normal_text = line[current_pos : marker["start"]] - if normal_text: - elements.append(TextElement(normal_text)) - - # 添加特殊样式的文本 - elements.append(marker["element_class"](marker["text"])) - current_pos = marker["end"] - - # 添加最后一段普通文本 - if current_pos < len(line): - elements.append(TextElement(line[current_pos:])) - - i += 1 - continue - - # 行内代码 (如果之前没匹配到混合样式) - inline_code_matches = re.findall(r"`([^`]+)`", line) - if inline_code_matches: - parts = re.split(r"`([^`]+)`", line) - for j, part in enumerate(parts): - if j % 2 == 0: # 普通文本 - if part: - elements.append(TextElement(part)) - else: # 行内代码 - elements.append(InlineCodeElement(part)) - i += 1 - continue - - # 普通文本 - elements.append(TextElement(line)) - i += 1 - - return elements - - -class MarkdownRenderer: - """Markdown渲染器,将元素渲染为图像""" - - def __init__( - self, - font_size: int = 26, - width: int = 800, - bg_color: Tuple[int, int, int] = (255, 255, 255), - ): - self.font_size = font_size - self.width = width - self.bg_color = bg_color - - async def render(self, markdown_text: str) -> Image.Image: - # 解析Markdown文本 - elements = await MarkdownParser.parse(markdown_text) - - # 计算总高度 - total_height = 20 # 初始边距 - for element in elements: - total_height += element.calculate_height(self.width, self.font_size) - - # 为页脚添加额外空间 - footer_height = 40 - total_height += 20 + footer_height # 结束边距 + 页脚高度 - - # 创建图像 - image = Image.new("RGB", (self.width, max(100, total_height)), self.bg_color) - draw = ImageDraw.Draw(image) - - # 渲染元素 - y = 10 - for element in elements: - y = element.render(image, draw, 10, y, self.width, self.font_size) - - # 添加页脚 - # 克莱因蓝色,近似RGB为(0, 47, 167) - klein_blue = (0, 47, 167) - # 灰色 - grey_color = (130, 130, 130) - - # 绘制"Powered by AstrBot"文本 - footer_font_size = 20 - footer_font = FontManager.get_font(footer_font_size) - - # 获取"Powered by "和"AstrBot"的宽度以便居中 - powered_by_text = "Powered by " - astrbot_text = f"AstrBot v{VERSION}" - - powered_by_width, _ = TextMeasurer.get_text_size(powered_by_text, footer_font) - astrbot_width, _ = TextMeasurer.get_text_size(astrbot_text, footer_font) - - total_width = powered_by_width + astrbot_width - x_start = (self.width - total_width) // 2 - - footer_y = total_height - footer_height - - # 绘制"Powered by "(灰色) - draw.text( - (x_start, footer_y), powered_by_text, font=footer_font, fill=grey_color - ) - - # 绘制"AstrBot"(克莱因蓝) - draw.text( - (x_start + powered_by_width, footer_y), - astrbot_text, - font=footer_font, - fill=klein_blue, - ) - - return image - +from astrbot.core.utils.t2i import RenderStrategy +from astrbot.core.utils.t2i.pillowmd.mdrenderer import PillowMdRenderer +from astrbot.core.utils.t2i.style_manager import StyleManeger class LocalRenderStrategy(RenderStrategy): """本地渲染策略实现""" + def __init__(self): + self.style_maneger = StyleManeger() + self.renderer = PillowMdRenderer() + async def render_custom_template( - self, tmpl_str: str, tmpl_data: dict, return_url: bool = True + self, tmpl_str: str, tmpl_data: dict, options: dict | None = None ) -> str: - raise NotImplementedError - - async def render(self, text: str, return_url: bool = False) -> str: - # 创建渲染器 - renderer = MarkdownRenderer(font_size=26, width=800) - + style = self.style_maneger.get_style_from_dict(tmpl_data) # 渲染Markdown文本 - image = await renderer.render(text) - - # 保存图像并返回路径/URL + image = await self.renderer.md_to_image(text=tmpl_str, style=style) + # 保存图像并返回路径 return save_temp_img(image) + + async def render(self, text: str, style_name: str|None=None) -> str: + style = self.style_maneger.get_style_from_name(style_name) + # 渲染Markdown文本 + image = await self.renderer.md_to_image(text=text, style=style) + # 保存图像并返回路径 + return save_temp_img(image) \ No newline at end of file diff --git a/astrbot/core/utils/t2i/pillowmd/__init__.py b/astrbot/core/utils/t2i/pillowmd/__init__.py new file mode 100644 index 000000000..8b03a7610 --- /dev/null +++ b/astrbot/core/utils/t2i/pillowmd/__init__.py @@ -0,0 +1,13 @@ +""" +Markdown额外语法说明 + + 以强制设定文本颜色 + 以取消强制设定文本颜色 + +!sgexter[对象名,参数1,参数2]绘制自定义对象(以下4个为预设对象): +- probar 进度条 [str,float,int,str] [标签,百分比,长度,显示] +- balbar 平衡条 [str,float,int] [标签,平衡度,长度] +- chabar 条形统计图[list[[str,int],...],int,int] [对象组[[对象名,对象所占比],...],x宽度,y宽度] +- card 卡片 [str,str,int,int,str] [标题,内容,x宽度,y宽度,图片绝对文件路径] + +""" diff --git a/astrbot/core/utils/t2i/pillowmd/decorates.py b/astrbot/core/utils/t2i/pillowmd/decorates.py new file mode 100644 index 000000000..9f0dc59eb --- /dev/null +++ b/astrbot/core/utils/t2i/pillowmd/decorates.py @@ -0,0 +1,240 @@ +from PIL import Image +from pathlib import Path + + +class MDDecorates: + """ + 管理 Markdown 渲染所需的背景与装饰图层。 + 支持: + - 背景模式(0 单图填充 / 1 九宫格) + - 顶部/底部装饰图(九宫格时可选“包含在中心区域”) + """ + + def __init__( + self, + backGroundMode: int, + backGroundData: dict, + topDecorates: dict, + bottomDecorates: dict, + backGroundsPath: Path, + ) -> None: + self.backGroundMode = backGroundMode + self.backGroundData = backGroundData + self.topDecorates = topDecorates + self.bottomDecorates = bottomDecorates + self.backGroundsPath = backGroundsPath + self.imageCache = {} + + def _get_image(self, name: str) -> Image.Image: + if name not in self.imageCache: + p: Path = self.backGroundsPath / name + if not p.is_file(): + raise FileNotFoundError(f"背景图片不存在: {p.resolve()}") + self.imageCache[name] = Image.open(p) + return self.imageCache[name] + + def _calc_nine_patch_bounds(self, x: int, y: int, bdata: dict): + """九宫格模式下计算四角宽高及调整画布大小""" + + corner1 = self._get_image(bdata["left-up"]) + corner2 = self._get_image(bdata["right-up"]) + corner3 = self._get_image(bdata["right-down"]) + corner4 = self._get_image(bdata["left-down"]) + + cxs1 = max(corner1.width, corner4.width) + cxs2 = max(corner2.width, corner3.width) + cys1 = max(corner1.height, corner2.height) + cys2 = max(corner3.height, corner4.height) + + x = max(cxs1 + cxs2 + 1, x) + y = max(cys1 + cys2 + 1, y) + + return (corner1, corner2, corner3, corner4), (cxs1, cys1, cxs2, cys2, x, y) + + def _fill_image(self, bg: Image.Image, img: Image.Image, mode: int) -> None: + """按模式填充背景""" + w, h = bg.size + iw, ih = img.size + + def tile( + img: Image.Image, dx: int, dy: int, offset_x: int = 0, offset_y: int = 0 + ): + for y0 in range(offset_y, h, dy): + for x0 in range(offset_x, w, dx): + bg.paste(img, (x0, y0)) + + if mode == 0: # 单图拉伸 + bg.paste(img.resize((w, h))) + + elif mode == 1: # 九宫格(注意:一般用于 Android NinePatch,这里保留原逻辑) + iw3, ih3 = iw // 3, ih // 3 + parts = [ + img.crop((i * iw3, j * ih3, (i + 1) * iw3, (j + 1) * ih3)) + for j in range(3) + for i in range(3) + ] + bg.paste(parts[4].resize((w - 2 * iw3, h - 2 * ih3)), (iw3, ih3)) + for i in range(3): + bg.paste(parts[i].resize((iw3, h - 2 * ih3)), (i * iw3, ih3)) + bg.paste(parts[6 + i].resize((iw3, h - 2 * ih3)), (i * iw3, h - ih3)) + for j in range(3): + bg.paste(parts[j * 3].resize((w - 2 * iw3, ih3)), (iw3, j * ih3)) + bg.paste( + parts[j * 3 + 2].resize((w - 2 * iw3, ih3)), (w - iw3, j * ih3) + ) + for j in range(3): + for i in range(3): + if (i, j) == (1, 1): + continue + bg.paste(parts[j * 3 + i], (i * iw3, j * ih3)) + + elif mode in (3, 4, 5, 6): # 平铺模式 + if mode == 3: # 横向平铺 + img = img.resize((iw, h)) + tile(img, iw, h) + elif mode == 4: # 纵向平铺 + img = img.resize((w, ih)) + tile(img, w, ih) + elif mode == 5: # 横纵平铺 + tile(img, iw, ih) + elif mode == 6: # 居中平铺 + offset_x, offset_y = (w - iw) // 2 % iw, (h - ih) // 2 % ih + tile(img, iw, ih, offset_x, offset_y) + + def _image_resize( + self, x: int, y: int, img: Image.Image, data: dict + ) -> Image.Image: + match data["mode"]: + case 0: + ... + case 1: + rawSize = img.size + xs1 = int(x * data["xlimit"]) + xs2 = int((y * data["ylimit"]) / rawSize[0] * rawSize[1]) + if xs1 > xs2: + size = (xs2, int(y * data["ylimit"])) + else: + size = (xs1, int(xs1 / rawSize[0] * rawSize[1])) + if "min" in data and size[0] < img.size[0] * data["min"]: + size = (int(size[0] * data["min"]), int(size[1] * data["min"])) + if "max" in data and size[0] > img.size[0] * data["max"]: + size = (int(size[0] * data["max"]), int(size[1] * data["max"])) + img = img.resize(size) + return img + + + def _draw_decorates( + self, + oimg: Image.Image, + decoratesDict: dict, + x: int, + y: int, + bmode: int, + cxs1: int, + cys1: int, + cxs2: int, + cys2: int, + ) -> None: + def pos_func(pos: str, kx: int, ky: int, img: Image.Image) -> tuple[int, int]: + w, h = img.size + return { + "left-up": (0, 0), + "left": (0, int(ky / 2 - h / 2)), + "left-down": (0, ky - h), + "up": (int(kx / 2 - w / 2), 0), + "down": (int(kx / 2 - w / 2), ky - h), + "right-up": (kx - w, 0), + "right": (kx - w, int(ky / 2 - h / 2)), + "right-down": (kx - w, ky - h), + "middle": (int(kx / 2 - w / 2), int(ky / 2 - h / 2)), + }[pos] + + for pos, lst in decoratesDict.items(): + for decorates in lst: + kx, ky = x, y + icMode = False + if bmode == 1 and decorates.get("include"): + kx, ky = max(x - cxs1 - cxs2, 1), max(y - cys1 - cys2, 1) + icMode = True + img = self._image_resize( + kx, ky, self._get_image(decorates["img"]), decorates + ) + k = Image.new("RGBA", (kx, ky)) + k.paste(img, pos_func(pos, kx, ky, img)) + oimg.alpha_composite(k, (cxs1, cys1) if icMode else (0, 0)) + + def Draw(self, x: int, y: int) -> Image.Image: + rx, ry = x, y + oimg = Image.new("RGBA", (x, y)) + bdata = self.backGroundData + cxs1 = cys1 = cxs2 = cys2 = 0 + + if self.backGroundMode == 0: + self._fill_image(oimg, self._get_image(bdata["img"]), bdata["mode"]) + elif self.backGroundMode == 1: + (corner1, corner2, corner3, corner4), (cxs1, cys1, cxs2, cys2, x, y) = ( + self._calc_nine_patch_bounds(x, y, bdata) + ) + oimg = Image.new("RGBA", (x, y)) + oimg.paste(corner1, (0, 0)) + oimg.paste(corner2, (x - cxs2, 0)) + oimg.paste(corner3, (x - cxs2, y - cys2)) + oimg.paste(corner4, (0, y - cys2)) + + img = self._get_image(bdata["up"]) + temp = Image.new("RGBA", (x - cxs1 - cxs2, cys1)) + self._fill_image(temp, img, {0: 0, 1: 3, 2: 5}[bdata["ud-mode"]]) + oimg.paste(temp, (cxs1, 0)) + + img = self._get_image(bdata["down"]) + temp = Image.new("RGBA", (x - cxs1 - cxs2, cys2)) + self._fill_image(temp, img, {0: 0, 1: 3, 2: 5}[bdata["ud-mode"]]) + oimg.paste(temp, (cxs1, y - cys2)) + + img = self._get_image(bdata["left"]) + temp = Image.new("RGBA", (cxs1, y - cys1 - cys2)) + self._fill_image(temp, img, {0: 0, 1: 4, 2: 6}[bdata["lr-mode"]]) + oimg.paste(temp, (0, cys1)) + + img = self._get_image(bdata["right"]) + temp = Image.new("RGBA", (cxs2, y - cys1 - cys2)) + self._fill_image(temp, img, {0: 0, 1: 4, 2: 6}[bdata["lr-mode"]]) + oimg.paste(temp, (x - cxs2, cys1)) + + img = self._get_image(bdata["middle"]) + temp = Image.new("RGBA", (x - cxs1 - cxs2, y - cys1 - cys2)) + self._fill_image(temp, img, bdata["middle-mode"]) + oimg.paste(temp, (cxs1, cys1)) + + self._draw_decorates( + oimg, + self.bottomDecorates, + x, + y, + self.backGroundMode, + cxs1, + cys1, + cxs2, + cys2, + ) + if rx != x: + oimg = oimg.resize((rx, ry)) + return oimg + + def DrawTop(self, x: int, y: int) -> Image.Image: + rx, ry = x, y + oimg = Image.new("RGBA", (x, y)) + cxs1 = cys1 = cxs2 = cys2 = 0 + + if self.backGroundMode == 1: + _, (cxs1, cys1, cxs2, cys2, x, y) = self._calc_nine_patch_bounds( + x, y, self.backGroundData + ) + oimg = Image.new("RGBA", (x, y)) + + self._draw_decorates( + oimg, self.topDecorates, x, y, self.backGroundMode, cxs1, cys1, cxs2, cys2 + ) + if rx != x: + oimg = oimg.resize((rx, ry)) + return oimg diff --git a/astrbot/core/utils/t2i/pillowmd/drawer.py b/astrbot/core/utils/t2i/pillowmd/drawer.py new file mode 100644 index 000000000..aa85fe665 --- /dev/null +++ b/astrbot/core/utils/t2i/pillowmd/drawer.py @@ -0,0 +1,421 @@ +from PIL import Image, ImageDraw +from typing import Optional, Callable, Any, ParamSpec +from .mixfont import MixFont +import random +import inspect + + +class ImageDrawPro(ImageDraw.ImageDraw): + def __init__( + self, + im, + lock_color=None, + blod_mode=None, + delete_line_mode=None, + under_line_mode=None, + mode=None, + ): + super().__init__(im, mode) + self.text_lock_color = lock_color + self.text_blod_mode = blod_mode + self.delete_line_mode = delete_line_mode + self.under_line_mode = under_line_mode + + def text( + self, + xy, + text, + fill=None, + font: Optional[MixFont] = None, + use_lock_color=True, + use_blod_mode=True, + use_delete_line_mode=True, + use_under_line_mode=True, + *args, + **kwargs, + ): + if font is None: + raise SyntaxError("font为必选项") + + if self.text_lock_color and use_lock_color: + fill = self.text_lock_color + + super().text((xy[0], xy[1]), text, fill, font.ft_font, *args, **kwargs) + if self.text_blod_mode and use_blod_mode: + for a, b in [(-1, 0), (1, 0)]: + super().text( + (xy[0] + a, xy[1] + b), text, fill, font.ft_font, *args, **kwargs + ) + + if self.delete_line_mode or self.under_line_mode: + xs, ys = font.GetSize(text) + + if self.delete_line_mode and use_delete_line_mode: + super().line( + ( + xy[0], + xy[1] + int(font.size / 2), + xy[0] + xs, + xy[1] + int(font.size / 2), + ), + fill, + int(font.size / 10) + 1, + ) + + if self.under_line_mode and use_under_line_mode: + super().line( + (xy[0], xy[1] + font.size + 2, xy[0] + xs, xy[1] + font.size + 2), + fill, + int(font.size / 10) + 1, + ) + + +def DefaultMdBackGroundDraw(xs: int, ys: int) -> Image.Image: + image = Image.new("RGBA", (xs, ys), color=(0, 0, 0)) + + drawUnder = ImageDrawPro(image) + for i in range(11): + drawUnder.rectangle( + (0, i * int(ys / 10), xs, (i + 1) * int(ys / 10)), + (52 - 3 * i, 73 - 4 * i, 94 - 2 * i), + ) + + imgUnder2 = Image.new("RGBA", (xs, ys), color=(0, 0, 0, 0)) + drawUnder2 = ImageDrawPro(imgUnder2) + for i in range(int(xs * ys / 20000) + 1): + temp = random.randint(1, 5) + temp1 = random.randint(20, 40) + temp2 = random.randint(10, 80) + temp3 = random.randint(0, xs - temp * 4) + temp4 = random.randint(-50, ys) + for x in range(3): + for y in range(temp1): + if random.randint(1, 2) == 2: + continue + drawUnder2.rectangle( + ( + temp3 + (temp + 2) * x, + temp4 + (temp + 2) * y, + temp3 + (temp + 2) * x + temp, + temp4 + (temp + 2) * y + temp, + ), + (0, 255, 180, temp2), + ) + + image.alpha_composite(imgUnder2) + + return image + + + +class MdExterImageDrawer: + def __init__(self, drawer: Callable[..., Image.Image]): + self.drawer = drawer + + def __call__( + self, *args: Any, nowf: MixFont, style=None, lockColor, **kwds: Any + ) -> Image.Image: + kwds["nowf"] = nowf + kwds["style"] = style + kwds["lockColor"] = lockColor + useVars = inspect.getfullargspec(self.drawer).args + return self.drawer(*args, **{key: kwds[key] for key in kwds if key in useVars}) + + +extendFuncs: dict[str, MdExterImageDrawer] = {} + +P = ParamSpec("P") + + +def NewMdExterImageDrawer( + name: str, +) -> Callable[[Callable[P, Image.Image]], Callable[P, Image.Image]]: + def catch(func: Callable[P, Image.Image]) -> Callable[P, Image.Image]: + extendFuncs[name] = MdExterImageDrawer(func) + return func + + return catch + + +@NewMdExterImageDrawer("probar") +def MakeProbar( + label: str, + pro: float, + size: int, + show: str, + nowf: MixFont, + style = None, +) -> Image.Image: + tempFs = nowf.GetSize(label) + temp = int(nowf.size / 6) + 1 + halfTemp = int(temp / 2) + exterImage = Image.new( + "RGBA", + (tempFs[0] + temp * 3 + size, int(nowf.size + temp * 2)), + color=(0, 0, 0, 0), + ) + drawEm = ImageDraw.Draw(exterImage) + for i in range(11): + drawEm.rectangle( + ( + 0, + i * int((exterImage.size[1]) / 10), + exterImage.size[0], + (i + 1) * int((exterImage.size[1]) / 10), + ), + (40 + 80 - 8 * i, 40 + 80 - 8 * i, 40 + 80 - 8 * i), + ) + drawEm.text((temp - 1, halfTemp), label, "#00CCCC", nowf.ft_font) + drawEm.text((temp + 1, halfTemp), label, "#CCFFFF", nowf.ft_font) + drawEm.text((temp, halfTemp), label, "#33FFFF", nowf.ft_font) + drawEm.rectangle( + (temp * 2 + tempFs[0], temp, temp * 2 + tempFs[0] + size, temp + nowf.size), + (0, 0, 0), + ) + for i in range(20): + drawEm.rectangle( + ( + temp * 2 + tempFs[0] + int(size * pro / 20 * i), + temp, + temp * 2 + tempFs[0] + int(size * pro / 20 * (i + 1)), + temp + nowf.size, + ), + ( + int(78 + 78 * ((i / 20) ** 3)), + int(177 + 177 * ((i / 20) ** 3)), + int(177 + 177 * ((i / 20) ** 3)), + ), + ) + drawEm.text((temp * 3 + tempFs[0], halfTemp), show, (0, 102, 102), nowf.ft_font) + return exterImage + + +@NewMdExterImageDrawer("balbar") +def MakeBalbar( + label: str, bal: float, size: int, nowf: MixFont, style = None +) -> Image.Image: + tempFs = nowf.GetSize(label) + temp = int(nowf.size / 6) + 1 + halfTemp = int(temp / 2) + exterImage = Image.new( + "RGBA", + (tempFs[0] + temp * 3 + size, int(nowf.size + temp * 2)), + color=(0, 0, 0, 0), + ) + drawEm = ImageDraw.Draw(exterImage) + for i in range(11): + drawEm.rectangle( + ( + 0, + i * int((exterImage.size[1]) / 10), + exterImage.size[0], + (i + 1) * int((exterImage.size[1]) / 10), + ), + (40 + 80 - 8 * i, 40 + 80 - 8 * i, 40 + 80 - 8 * i), + ) + drawEm.text((temp - 1, halfTemp), label, "#00CCCC", nowf.ft_font) + drawEm.text((temp + 1, halfTemp), label, "#CCFFFF", nowf.ft_font) + drawEm.text((temp, halfTemp), label, "#33FFFF", nowf.ft_font) + drawEm.rectangle( + (temp * 2 + tempFs[0], temp, temp * 2 + tempFs[0] + size, temp + nowf.size), + (0, 0, 0), + ) + for i in range(20): + drawEm.rectangle( + ( + temp * 2 + tempFs[0] + int(size * bal / 20 * i), + temp, + temp * 2 + tempFs[0] + int(size * bal / 20 * (i + 1)), + temp + nowf.size, + ), + ( + int(78 + 78 * ((i / 20) ** 3)), + int(177 + 177 * ((i / 20) ** 3)), + int(177 + 177 * ((i / 20) ** 3)), + ), + ) + drawEm.rectangle( + ( + temp * 2 + tempFs[0] + size - int(size * (1 - bal) / 20 * (i + 1)), + temp, + temp * 2 + tempFs[0] + size - int(size * (1 - bal) / 20 * i), + temp + nowf.size, + ), + ( + int(177 + 177 * ((i / 20) ** 3)), + int(21 + 21 * ((i / 20) ** 3)), + int(21 + 21 * ((i / 20) ** 3)), + ), + ) + drawEm.line( + ( + temp * 2 + tempFs[0] + int(size * bal), + temp - halfTemp, + temp * 2 + tempFs[0] + int(size * bal), + temp + nowf.size + halfTemp, + ), + (255, 255, 255), + 5, + ) + if bal == 0.5: + drawEm.text( + (temp * 2 + tempFs[0] + int(size * bal) + 3, halfTemp), + "+0%", + (102, 0, 0), + nowf.ft_font, + ) + elif bal > 0.5: + if bal == 1: + text = "+∞%" + else: + text = f"+{round(bal / (1 - bal) * 100 - 100, 2)}%" + drawEm.text( + ( + temp * 2 + tempFs[0] + int(size * bal) - nowf.GetSize(text)[0] - 3, + halfTemp, + ), + text, + (0, 102, 102), + nowf.ft_font, + ) + elif bal < 0.5: + if bal == 0: + text = "-∞%" + else: + text = f"-{round((1 - bal) / bal * 100 - 100, 2)}%" + drawEm.text( + (temp * 2 + tempFs[0] + int(size * bal) + 3, halfTemp), + text, + (102, 0, 0), + nowf.ft_font, + ) + + return exterImage + + +@NewMdExterImageDrawer("chabar") +def MakeChabar( + objs: list[tuple[str, int]], + xSize: int, + ySize: int, + nowf: MixFont, + style = None, +) -> Image.Image: + if not style: + from .style import MdStyle + style = MdStyle() + nums = [nowf.GetSize(str(i[1])) for i in objs] + strs = [nowf.GetSize(i[0]) for i in objs] + space = int(xSize / (len(objs) * 2 + 1)) + halfSpace = int(space / 2) + + exterImage = Image.new( + "RGBA", + ( + int( + max([i[0] for i in nums]) + + xSize + + max(strs[-1][0] / 2 - space * 1.5, 0) + ) + + 5, + int(ySize + nums[0][1] / 2 + max([i[1] for i in strs])) + 5, + ), + color=(0, 0, 0, 0), + ) + drawEm = ImageDraw.Draw(exterImage) + + lineY = int(ySize + nums[0][1] / 2) - 5 + lineX = int(max([i[0] for i in nums]) + 5) + + maxM = max([i[1] for i in objs]) + + for i in range(len(objs)): + X = space * (1 + i * 2) + Y = int(ySize * 0.8 * objs[i][1] / maxM) + color = style.textGradientEndColor + drawEm.line( + (lineX, lineY - Y, lineX + X + space, lineY - Y), + (int(color[0] * 0.6), int(color[1] * 0.6), int(color[2] * 0.6)), + 1, + ) + drawEm.text( + (lineX - nums[i][0] - 5, lineY - Y - int(nums[i][1] / 2)), + str(objs[i][1]), + style.textColor, + nowf.ft_font, + ) + drawEm.text( + (int(lineX + X + space / 2 - strs[i][0] / 2), lineY + 5), + objs[i][0], + style.textColor, + nowf.ft_font, + ) + drawEm.rectangle( + (lineX + X, lineY - Y, lineX + X + space, lineY), style.textGradientEndColor + ) + drawEm.text( + (lineX + X + halfSpace - int(nums[i][0] / 2), lineY - Y - nowf.size - 2), + str(objs[i][1]), + style.textColor, + nowf.ft_font, + ) + + drawEm.line((lineX, lineY, lineX + xSize, lineY), style.textColor, 1) + drawEm.polygon( + [ + (lineX + xSize, lineY), + (lineX + xSize - 3, lineY - 3), + (lineX + xSize - 3, lineY + 3), + ], + style.textColor, + ) + drawEm.line((lineX, lineY - ySize, lineX, lineY), style.textColor, 1) + drawEm.polygon( + [ + (lineX, lineY - ySize), + (lineX - 3, lineY - ySize + 3), + (lineX + 3, lineY - ySize + 3), + ], + style.textColor, + ) + + return exterImage + + +@NewMdExterImageDrawer("card") +def MakeCard( + title: str, + text: str, + xSize: int, + ySize: int, + file: str, + nowf: MixFont, + style = None, +) -> Image.Image: + """创建卡片""" + if xSize < ySize: + raise ValueError("xSize必须比ySize大") + im = Image.open(file) + back = Image.new("RGBA", (xSize, ySize), (0, 0, 0)) + d = ImageDrawPro(back) + + im = im.resize((ySize - 8, ySize - 8)) + d.rectangle((0, 0, xSize, ySize), (27, 26, 85)) + d.rectangle((0, 0, ySize, ySize), (83, 92, 145)) + d.rectangle((2, 2, ySize - 2, ySize - 2), (83, 92, 145)) + + back.paste(im, (4, 4)) + + d.text((ySize + 8, 8), title, (30, 255, 255), nowf) + x, y = ySize + 8, 8 + nowf.size + 8 + for i in text: + s = nowf.GetSize(i) + if x + s[0] > xSize or i == "\n": + x = ySize + 8 + y += nowf.size + 8 + d.text((x, y), i, (255, 255, 255), nowf) + x += s[0] + + return back + + diff --git a/astrbot/core/utils/t2i/pillowmd/mdrenderer.py b/astrbot/core/utils/t2i/pillowmd/mdrenderer.py new file mode 100644 index 000000000..75676e8ac --- /dev/null +++ b/astrbot/core/utils/t2i/pillowmd/mdrenderer.py @@ -0,0 +1,1787 @@ +from PIL import Image +from typing import Optional, Union, Any, List, Tuple +from pathlib import Path +import os +import math +import copy +import pillowlatex +import hashlib +from astrbot.core.utils.io import download_image_by_url +from dataclasses import dataclass, field +from .drawer import DefaultMdBackGroundDraw +from .mixfont import MixFont +from .drawer import ImageDrawPro, extendFuncs +from .style import MdStyle + + + +@dataclass(slots=True) +class MdRenderState: + # --------------- 样式入口(只读) ------------- + style: MdStyle + + # ---------------- 字体 ---------------- + nowf: MixFont # 当前生效字体 + fontK: MixFont # 字体备份(代码块/公式等场景切换后恢复) + + # ---------------- 排版 ---------------- + nmaxX: int = 0 # 当前行最大宽度(像素) + xidx: int = 0 # 当前行内字符序号(从 1 开始) + yidx: int = 1 # 当前行号(从 1 开始) + nx: int = 0 # 当前行已占宽度(像素) + ny: int = 0 # 当前行已占高度(像素) + ys: int = 0 # 当前行总高度(像素) + nmaxh: int = 0 # 当前行最大字符高度(像素) + + hs: List[int] = field(default_factory=list) # 每行高度记录 + maxxs: List[int] = field(default_factory=list) # 每行最大宽度记录 + + # ---------------- 文本 ---------------- + text: str = "" + textS: int = 0 # 文本总长度 + idx: int = -1 # 当前解析到的字符索引 + + # ---------------- 模式开关 ---------------- + bMode: bool = False # 行间公式模式 ($$) + bMode2: bool = False # 行内代码模式 (`) + lMode: bool = False # 删除线模式 (~~) + codeMode: bool = False # 代码块模式 (```) + linkMode: bool = False # 链接模式 + yMode: bool = False # 引用块模式 (>) + textMode: bool = False # 纯文本模式(避免重复进入 Markdown 标记判断) + citeNum: int = 0 # 引用层级深度 + + # ---------------- 表格 ---------------- + forms: List[dict] = field(default_factory=list) # 预解析的表格数据 + formIdx: int = -1 # 当前表格索引 + + # ---------------- 图片 ---------------- + images: List[dict[str, Any]] = field(default_factory=list) # 待绘制图片列表 + isImage: bool = False # 当前字符是否为图片占位 + nowImage: Optional[Image.Image] = None # 当前待绘制图片对象 + + # ---------------- 链接/跳过/颜色 ------ + skips: List[int] = field(default_factory=list) # 需跳过的字符索引(链接、公式等) + linkbegins: List[int] = field(default_factory=list) # 链接开始索引 + linkends: List[int] = field(default_factory=list) # 链接结束索引 + lockColor: Optional[Tuple[int, int, int]] = None # 锁定文字颜色 + colors: List[dict] = field(default_factory=list) # 颜色区间记录 + + # ---------------- 公式 ---------------- + latexs: List[dict] = field(default_factory=list) # 预解析的公式数据 + latexIdx: int = -1 # 当前公式索引 + nowlatexImageIdx: int = -1 # 当前公式图片子索引(多行公式) + + # ---------------- 其他 ---------------- + dr: int = 0 # 列表符号占用高度(用于垂直对齐) + + # --------------- 工厂方法 --------------------- + @classmethod + def create(cls, text: str, style: MdStyle) -> "MdRenderState": + return cls( + text=text, + textS=len(text), + nowf=style.mainFont, + fontK=style.mainFont, + style=style, + ) + + +class PillowMdRenderer: + """ + Markdown → 长图渲染器 + 1. 预解析:扫描文本,记录表格、公式、图片、链接、颜色等区间 + 2. 排版:计算每行宽高、分页 + 3. 绘制:分层绘制背景、特效、文字、图片 + """ + + def __init__(self) -> None: + pass + + @staticmethod + def safe_open_image(path: str): + """ + 如果文件存在且能正常打开,返回 RGBA 的 Image 对象; + """ + try: + if path and os.path.isfile(path): + return Image.open(path).convert("RGBA") + except Exception: + pass + + + @staticmethod + async def open_image_with_cache(imageSrc: str, cache_dir: Path) -> Image.Image: + """ + 根据链接返回 PIL.Image: + 1. 用 md5 做文件名,保留原后缀 + 2. 缓存目录:cache_dir / .cache + 3. 无缓存则下载,下载失败返回 1×1 透明图 + """ + cache_dir.mkdir(parents=True, exist_ok=True) + + # 生成文件名 + suffix = Path(imageSrc).suffix or ".jpg" + safe_name = hashlib.md5(imageSrc.encode()).hexdigest() + suffix + cache_path = cache_dir / safe_name + + try: + if cache_path.exists(): # 命中缓存 + return Image.open(cache_path).convert("RGBA") + # 下载 + tmp_path = await download_image_by_url(imageSrc) + # 移动到缓存 + cache_path.write_bytes(Path(tmp_path).read_bytes()) + return Image.open(cache_path).convert("RGBA") + except Exception: + # 任意异常都降级 + return Image.new("RGBA", (1, 1), (0, 0, 0, 0)) + + @staticmethod + def get_args(args: str) -> tuple[list[Any], dict[str, Any]]: + args += "," + args1 = [] + args2 = {} + pmt = "" + + def _get_one_arg(arg: str): + if arg[0] == "[" and arg[-1] == "]": + args = [] + pmt = "" + deep = 0 + string = False + pre = "" + for i in arg[1:-1] + ",": + if i == "]" and not string: + deep -= 1 + if i == '"' and pre != "\\": + string = not string + + if i == "," and deep == 0 and not string: + args.append(pmt.strip()) + pmt = "" + pre = "" + continue + elif i == "[" and not string: + deep += 1 + + pmt += i + pre = i + return [_get_one_arg(i) for i in args] + if arg[0] == '"' and arg[-1] == '"': + return arg[1:-1] + if arg in ["True", "true"]: + return True + if "." in arg: + return float(arg) + return int(arg) + + deep = 0 + pre = "" + string = False + for i in args: + if i == "]" and not string: + deep -= 1 + + if i == '"' and pre != "\\": + string = not string + + if i == "," and deep == 0 and not string: + pmt = pmt.strip() + if ( + pmt[0] + not in [ + '"', + "[", + ] + and pmt not in ["True", "true", "False", "false"] + and not pmt[0].isdigit() + ): + args2[pmt.split("=")[0].strip()] = "=".join(pmt.split("=")[1:]).strip() + else: + args1.append(pmt) + pmt = "" + pre = "" + continue + elif i == "[" and not string: + deep += 1 + + pmt += i + pre = i + + args1 = [_get_one_arg(i) for i in args1] + for key in args2: + args2[key] = _get_one_arg(args2[key]) + + return (args1, args2) + + # 老接口,新接口开发中 + async def md_to_image( + self, + text: str, + style: MdStyle, + imagePath: Optional[Union[str, Path]] = None, + autoPage: bool | None = None, + ): + """ + 将Markdown转化为图片 + text - 要转化的文本 + style - 风格 + imagePath - 图片相对路径所使用的基路径 + autoPage - 是否自动分页(尽可能接近黄金分割比) + """ + s = style + t = MdRenderState.create(text, style) + imagePath = Path(imagePath) if imagePath else Path(s.images) + autoPage = autoPage if autoPage is not None else s.autoPage + + # ========== 1. 预解析:扫描特殊区间 ========== + while t.idx < t.textS - 1: + t.isImage = False + nowObjH = t.nowf.size + t.idx += 1 + i = text[t.idx] + t.xidx += 1 + + size = t.nowf.GetSize(i) + xs, ys = size[0], size[1] + + # ---- 公式图片占位高度 ---- + if ( + t.latexIdx != -1 + and t.latexs[t.latexIdx]["begin"] < t.idx < t.latexs[t.latexIdx]["end"] + ): + t.nowlatexImageIdx += 1 + + if t.nowlatexImageIdx >= len(t.latexs[t.latexIdx]["images"]): + t.idx = t.latexs[t.latexIdx]["end"] - 1 + t.nowlatexImageIdx = -1 + + continue + else: + space = t.latexs[t.latexIdx]["space"] + i = t.latexs[t.latexIdx]["images"][t.nowlatexImageIdx] + sz = t.latexs[t.latexIdx]["images"][t.nowlatexImageIdx].size + xs, ys = [sz[0], sz[1] + space * 2] + nowObjH = ys + + # ---- 跳过已处理区间 ---- + if t.idx in t.skips: + continue + if t.idx in t.linkends: + continue + + # ---- 行首空格压缩 ---- + if t.xidx == 1 and not t.codeMode and i == " ": + while t.idx < t.textS and text[t.idx] == " ": + t.idx += 1 + t.idx -= 1 + t.xidx = 0 + continue + + # ---- 标题 ---- + if not t.textMode and i == "#" and not t.codeMode: + if t.idx + 1 < t.textS and text[t.idx + 1] == "#": + if t.idx + 2 <= t.textS and text[t.idx + 2] == "#": + t.idx += 2 + t.nowf = s.font1 + else: + t.idx += 1 + t.nowf = s.font2 + else: + t.nowf = s.font3 + while t.idx + 1 < t.textS and text[t.idx + 1] == " ": + t.idx += 1 + continue + + # ---- 无序列表 ---- + elif ( + not t.textMode + and i in ["*", "-", "+"] + and t.idx + 1 < t.textS + and text[t.idx + 1] == " " + and not t.codeMode + ): + t.idx += 1 + t.dr = t.nmaxh + t.nx += t.nmaxh + while t.idx + 1 < t.textS and text[t.idx + 1] == " ": + t.idx += 1 + continue + + # ---- 有序列表 ---- + elif not t.textMode and i.isdigit() and not t.codeMode: + tempIdx = t.idx - 1 + flag = False + number = "" + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + if text[tempIdx].isdigit(): + number += text[tempIdx] + elif text[tempIdx] == ".": + flag = True + break + else: + break + if flag: + t.idx = tempIdx + t.nx += 30 + while t.idx + 1 < t.textS and text[t.idx + 1] == " ": + t.idx += 1 + continue + t.textMode = True + + # ---- 引用 ---- + elif not t.textMode and i == ">" and not t.codeMode: + t.citeNum = 1 + while t.idx + 1 < t.textS and text[t.idx + 1] == ">": + t.citeNum += 1 + t.idx += 1 + while t.idx + 1 < t.textS and text[t.idx + 1] == " ": + t.idx += 1 + t.nx += 30 * (t.citeNum) + 5 + continue + + # ---- 代码块 ---- + elif ( + not t.textMode + and t.idx + 2 <= t.textS + and text[t.idx : t.idx + 3] in ["```", "~~~"] + ): + t.ny += s.codeUb + t.nx += s.codeLb + while t.idx < t.textS - 1 and text[t.idx + 1] != "\n": + t.idx += 1 + if not t.codeMode: + t.fontK = t.nowf + t.nowf = s.fontC + else: + t.nowf = t.fontK + t.codeMode = not t.codeMode + continue + + # ---- 表格 ---- + elif not t.textMode and i == "|" and not t.codeMode: + tempIdx = t.idx - 1 + lText = "" + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + lText += text[tempIdx] + + tempIdx += 1 + lText2 = "" + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + lText2 += text[tempIdx] + + lText = lText.strip() + lText2 = lText.strip() + + temp1 = lText.count("|") + temp2 = lText2.count("|") + exterX = temp1 * s.formLineb + if ( + len(lText) + and len(lText2) + and lText[0] == lText[-1] == lText2[0] == lText2[-1] == "|" + and temp1 == temp2 + and temp1 >= 2 + and exterX < s.maxX + ): + form = [lText.split("|")[1:-1]] + + while True: + preIdx = tempIdx + tempIdx += 1 + tempText = "" + + if tempIdx + 1 >= t.textS or text[tempIdx + 1] != "|": + break + + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + tempText += text[tempIdx] + + temp = tempText.count("|") + if not (tempText[0] == tempText[-1] == "|" and temp >= 2): + tempIdx = preIdx + break + + form.append(tempText.split("|")[1:-1]) + + formHeadNum = len(form[0]) + formSize = [] + for ii in range(len(form)): + formNowLNum = len(form[ii]) + + if formNowLNum < formHeadNum: + form[ii] = form[ii] + [""] * (formHeadNum - formNowLNum) + if formNowLNum > formHeadNum: + form = form[0:formHeadNum] + + formSize.append( + [ + sum([s.mainFont.GetSize(j)[0] for j in i]) + for i in form[ii] + ] + ) + + formRow = len(form) + colunmSizes = [[0, 99999]] + sorted( + [ + [max([formSize[deep][i] for deep in range(formRow)]), i] + for i in range(formHeadNum) + ], + key=lambda x: x[0], + ) + maxIdx = len(colunmSizes) - 1 + + if not (s.mainFont.size * len(colunmSizes) + exterX > s.maxX): + while sum([i[0] for i in colunmSizes]) + exterX > s.maxX: + exceed = sum([i[0] for i in colunmSizes]) + exterX - s.maxX + sizeIdx = len(colunmSizes) - 1 + + while ( + colunmSizes[sizeIdx - 1][0] == colunmSizes[sizeIdx][0] + ): + sizeIdx -= 1 + + temp = math.ceil( + min( + exceed / (maxIdx - sizeIdx + 1), + colunmSizes[sizeIdx][0] + - colunmSizes[sizeIdx - 1][0], + ) + ) + for ii in range(sizeIdx, maxIdx + 1): + colunmSizes[ii][0] = colunmSizes[ii][0] - temp + + colunmSizes = [ + i[0] for i in sorted(colunmSizes[1:], key=lambda x: x[1]) + ] + rowSizes = [] + + for ii in range(formRow): + nMaxRowSize = 0 + + for j in range(formHeadNum): + tempRowSize = s.mainFont.size + formNx = 0 + formTextIdx = -1 + formText = form[ii][j] + formTextSize = len(formText) + + while formTextIdx + 1 < formTextSize: + formTextIdx += 1 + char = formText[formTextIdx] + formCharX = s.mainFont.GetSize(char)[0] + + if formNx + formCharX > colunmSizes[j]: + tempRowSize += s.mainFont.size + s.lineb + formNx = 0 + + formNx += formCharX + + nMaxRowSize = max(nMaxRowSize, tempRowSize) + + rowSizes.append(nMaxRowSize) + + t.forms.append( + { + "height": (formRow) * s.formLineb + + sum(rowSizes) + + s.formLineb, + "width": sum(colunmSizes) + exterX, + "rowSizes": copy.deepcopy(rowSizes), + "colunmSizes": copy.deepcopy(colunmSizes), + "form": copy.deepcopy(form), + "endIdx": tempIdx, + "beginIdx": t.idx, + } + ) + t.ny += s.lineb * (tempIdx < t.textS) + t.forms[-1]["height"] + t.ys = 0 + t.idx = tempIdx + t.nmaxX = max(t.nmaxX, sum(colunmSizes) + exterX) + continue + + # ---- 普通文字 ---- + else: + t.textMode = True + + # ---- 行内公式/代码/图片/链接/颜色等 ---- + if ( + i == "*" + and t.idx + 1 < t.textS + and text[t.idx + 1] == "*" + and not t.codeMode + ): + t.idx += 1 + continue + if ( + i == "~" + and t.idx + 1 < t.textS + and text[t.idx + 1] == "~" + and not t.codeMode + ): + t.idx += 1 + continue + + if ( + i == "$" + and (text[t.idx - 1] != "\\" if t.idx >= 1 else True) + and (t.idx + 1 < t.textS and text[t.idx + 1] == "$") + and not t.codeMode + and not t.bMode2 + ): + tempIdx = t.idx + flag = False + while tempIdx < t.textS - 1: + tempIdx += 1 + if ( + text[tempIdx] == "$" + and tempIdx + 1 < t.textS + and text[tempIdx + 1] == "$" + ): + flag = True + break + if flag or t.bMode: + t.nx += 2 + if not t.bMode: + if t.xidx != 1: + t.nmaxX = max(t.nx, t.nmaxX) + t.maxxs.append(t.nx) + t.nx = t.codeMode * s.codeLb + t.ny += t.nmaxh + s.lineb + t.xidx = 0 + t.yidx += 1 + t.hs.append(t.nmaxh) + t.nmaxh = int(s.fontC.size / 3) + t.citeNum = 0 + t.dr = 0 + + t.fontK = t.nowf + t.nowf = s.get_gfont(t.nowf) + lateximgs = pillowlatex.RenderLaTeXObjs( + pillowlatex.GetLaTeXObjs(text[t.idx + 2 : tempIdx]), + font=MixFont.MixFontToLatexFont(t.nowf), + color=s.expressionTextColor, + ) + t.latexs.append( + { + "begin": t.idx + 1, + "end": tempIdx, + "images": lateximgs, + "maxheight": max([i.height for i in lateximgs]) + if lateximgs + else t.nowf.size, + "space": pillowlatex.settings.SPACE, + "super": True, + } + ) + t.latexIdx += 1 + t.nowlatexImageIdx = -1 + else: + t.nmaxX = max(t.nx, t.nmaxX) + t.maxxs.append(t.nx) + t.nx = t.codeMode * s.codeLb + t.ny += t.nmaxh + s.lineb + t.xidx = 0 + t.yidx += 1 + t.hs.append(t.nmaxh) + t.nmaxh = int(s.fontC.size / 3) + t.citeNum = 0 + t.dr = 0 + + t.nowf = t.fontK + t.bMode = not t.bMode + t.idx += 1 + continue + + if ( + i == "$" + and (text[t.idx - 1] != "\\" if t.idx >= 1 else True) + and not t.codeMode + and not t.bMode2 + ): + tempIdx = t.idx + flag = False + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + if text[tempIdx] == "$": + flag = True + break + if flag or t.bMode: + t.nx += 2 + if not t.bMode: + t.fontK = t.nowf + t.nowf = s.get_gfont(t.nowf) + lateximgs = pillowlatex.RenderLaTeXObjs( + pillowlatex.GetLaTeXObjs(text[t.idx + 1 : tempIdx]), + font=MixFont.MixFontToLatexFont(t.nowf), + color=s.expressionTextColor, + ) + t.latexs.append( + { + "begin": t.idx, + "end": tempIdx, + "images": lateximgs, + "maxheight": max([i.height for i in lateximgs]) + if lateximgs + else t.nowf.size, + "space": pillowlatex.settings.SPACE, + "super": False, + } + ) + t.latexIdx += 1 + t.nowlatexImageIdx = -1 + else: + t.nowf = t.fontK + t.bMode = not t.bMode + continue + + if ( + i == "`" + and (text[t.idx - 1] != "\\" if t.idx >= 1 else True) + and not t.codeMode + and not t.bMode + ): + if not ( + t.xidx == 1 + and t.idx + 2 <= t.textS + and text[t.idx : t.idx + 3] == "```" + ): + tempIdx = t.idx + flag = False + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + if text[tempIdx] == "`": + flag = True + break + if flag or t.bMode2: + t.nx += 2 + if not t.bMode2: + t.fontK = t.nowf + t.nowf = s.get_gfont(t.nowf) + else: + t.nowf = t.fontK + t.bMode2 = not t.bMode2 + continue + + if ( + i == "!" + and t.idx + 9 < t.textS + and text[t.idx : t.idx + 9] == "!sgexter[" + and not t.codeMode + and not t.bMode + ): + tempIdx = t.idx + 8 + flag = False + data = "" + + deep = 0 + string = False + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + + if text[tempIdx] == '"' and text[tempIdx - 1] == "\\": + string = not string + + if text[tempIdx] == "[" and not string: + deep += 1 + + if text[tempIdx] == "]" and not string: + if deep == 0: + flag = True + break + + deep -= 1 + + data += text[tempIdx] + + if flag: + flag = False + + try: + args = data.split(",") + funcName = args[0] + args = ",".join(args[1:]) + flag = True + except Exception: + pass + + if flag and funcName in extendFuncs: + flag = False + + try: + args1, args2 = self.get_args(args) # type: ignore + flag = True + except Exception: + pass + + if flag: + idata = { + "image": extendFuncs[funcName]( + *args1, + **args2, + nowf=t.nowf, + style=s, + lockColor=t.lockColor, + ), + "begin": t.idx, + "end": tempIdx, + } + t.images.append(idata) + t.isImage = True + xs, ys = idata["image"].size + nowObjH = ys + t.idx = tempIdx + + + if ( + i == "!" + and t.idx + 1 < t.textS + and text[t.idx : t.idx + 2] == "![" + and not t.codeMode + and not t.bMode + ): + imageName = "" + imageSrc = "" + tempIdx = t.idx + 1 + try: + flag = False + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + if text[tempIdx] == "]": + flag = True + break + imageName += text[tempIdx] + if not flag: + raise ValueError("错误: 图片解析失败") + tempIdx += 1 + flag = False + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + if text[tempIdx] == ")": + flag = True + break + imageSrc += text[tempIdx] + if not flag: + raise ValueError("错误: 图片解析失败") + imageSrc = imageSrc.split(" ")[0] + image = await self.open_image_with_cache(imageSrc, imagePath) + idata = {"image": image, "begin": t.idx, "end": tempIdx} + t.images.append(idata) + if idata["image"].size[0] > s.maxX: + idata["image"] = idata["image"].resize( + ( + int(s.maxX), + int( + idata["image"].size[1] + * (s.maxX / idata["image"].size[0]) + ), + ) + ) + t.isImage = True + xs, ys = idata["image"].size + nowObjH = ys + t.idx = tempIdx + except Exception as e: + print(e) + t.skips += list(range(t.idx + len(imageName) + 2, tempIdx)) + t.linkbegins.append(t.idx) + t.linkends.append(tempIdx) + continue + + if i == "[" and not t.codeMode and not t.bMode: + tempIdx = t.idx + linkName = "" + link = "" + flag = False + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + if text[tempIdx] == "]": + flag = True + break + linkName += text[tempIdx] + flag = False + tempIdx += 1 + if tempIdx + 1 <= t.textS and text[tempIdx] == "(": + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + if text[tempIdx] == ")": + flag = True + break + link += text[tempIdx] + if flag: + t.skips.append(t.idx + len(linkName) + 2) + t.linkbegins.append(t.idx) + t.linkends.append(t.idx + len(linkName) + 2) + for k in range(t.idx + len(linkName) + 3, tempIdx): + t.skips.append(k) + t.skips.append(tempIdx) + + if ( + i == "<" + and t.idx + 6 < t.textS + and text[t.idx + 1 : t.idx + 7] == "color=" + ): + color = "" + flag = False + tempIdx = t.idx + 6 + k = 0 + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + k += 1 + if k >= 10: + break + tempIdx += 1 + if text[tempIdx] == ">": + flag = True + break + color += text[tempIdx] + + if flag: + if (len(color) == 7 and color[0] == "#") or color == "None": + t.lockColor = None if color == "None" else color # type ignored + t.colors.append( + {"beginIdx": t.idx, "endIdx": tempIdx, "color": t.lockColor} + ) + t.idx = tempIdx + continue + + ex = 0 + preNmaxh = max(t.nmaxh, nowObjH) + if t.dr and min(preNmaxh, s.font3.size) > t.dr: + ex += min(preNmaxh, s.font3.size) - t.dr + t.dr = min(preNmaxh, s.font3.size) + + if i == "\n": + t.nmaxX = max(t.nx, t.nmaxX) + t.maxxs.append(t.nx) + t.nx = t.codeMode * s.codeLb + t.ny += t.nmaxh + s.lineb + t.xidx = 0 + t.yidx += 1 + t.hs.append(t.nmaxh) + t.nmaxh = int(s.fontC.size / 3) + t.textMode = False + t.citeNum = 0 + if not t.codeMode: + t.nowf = s.mainFont + t.dr = 0 + continue + if t.nx + xs + ex > s.maxX: + t.nmaxX = max(t.nx, t.nmaxX) + t.maxxs.append(t.nx) + t.yidx += 1 + t.nx = t.codeMode * s.codeLb + t.ny += t.nmaxh + s.lineb + if t.citeNum: + t.nx += 30 * (t.citeNum - 1) + 5 + t.hs.append(t.nmaxh) + t.nmaxh = int(s.fontC.size) + t.dr = 0 + + t.nx += int(xs + ex) + t.nmaxh = int(max(t.nmaxh, nowObjH)) + + # ========== 2. 计算分页 & 画布尺寸 ========== + + t.nmaxX = max(t.nx, t.nmaxX) + t.nmaxh = max(t.nmaxh, t.ys) + t.ny += t.nmaxh + t.maxxs.append(t.nx) + t.hs.append(t.nmaxh) + + paintImage = self.safe_open_image(s.paintPath) + + page = 1 + if autoPage: + while True: + bX = (t.nmaxX + s.rb + s.lb) * page + bY = int(t.ny / page) + s.ub + s.db + if bY > 300 and paintImage: + txs, tys = bX, bY + + if tys < txs * 2.5: + bX += int( + paintImage.size[0] / paintImage.size[1] * (bY - s.ub - s.db) + ) + eX = (t.nmaxX + s.rb + s.lb) * (page + 1) + eY = int(t.ny / (page + 1)) + s.ub + s.db + if eY > 300 and paintImage: + txs, tys = eX, eY + + if tys < txs * 2.5: + eX += int( + paintImage.size[0] / paintImage.size[1] * (eY - s.ub - s.db) + ) + if abs(min(bX, bY) / max(bX, bY) - 0.618) < abs( + min(eX, eY) / max(eX, eY) - 0.618 + ): + break + page += 1 + + if page > len(t.hs): + page = len(t.hs) + + txs, tys = (t.nmaxX + s.rb + s.lb) * page, int(t.ny / page) + + yTys = tys + + temp = 0 + temp2 = tys + temp3 = tys + for ys in t.hs: + temp += ys + + if temp > yTys: + temp2 = max(temp2, temp + 1) + temp = 0 + continue + + temp += s.lineb + + temp = 0 + for ys in t.hs[-1::-1]: + temp += ys + + if temp > yTys: + temp3 = max(temp3, temp + 1) + temp = 0 + continue + + temp += s.lineb + + tys = min(temp2, temp3) + + tys = int(tys) + + PYL = tys + 1 + tys += s.ub + s.db + tlb = s.lb + + bt = False + + if tys > 300 and tys < txs * 2.5 and paintImage: + bt = True + temp = int(tys - s.ub - s.db) + paintImage = paintImage.resize( + (int(paintImage.size[0] / paintImage.size[1] * temp), temp) + ).convert("RGBA") + txs += paintImage.size[0] + + t.lockColor = None + + # ========== 3. 创建画布 & 分层绘制 ========== + + if s.decorates: + outImage = s.decorates.Draw(int(txs), tys) + else: + outImage = DefaultMdBackGroundDraw(int(txs), tys) + + imgEffect = Image.new("RGBA", (int(txs), tys), color=(0, 0, 0, 0)) + imgText = Image.new("RGBA", (int(txs), tys), color=(0, 0, 0, 0)) + imgImages = Image.new("RGBA", (int(txs), tys), color=(0, 0, 0, 0)) + + drawEffect = ImageDrawPro(imgEffect) + draw = ImageDrawPro(imgText) + + # 分页线 + for i in range(1, page): + lx = (t.nmaxX + s.rb + s.lb) * i + lby = s.ub + ley = tys - s.db + lwidth = int(min(s.lb, s.rb) / 6) * 2 + match s.pageLineStyle: + case "full_line": + drawEffect.line((lx, lby, lx, ley), s.pageLineColor, lwidth) + case "dotted_line": + for nly in range(lby, ley, lwidth * 8): + drawEffect.line( + (lx, nly, lx, nly + lwidth * 5), s.pageLineColor, lwidth + ) + + # 重置状态,准备绘制 + t.xidx = 0 + t.yidx = 1 + t.nx = 0 + t.ny = 0 + t.nmaxh = 0 + t.nowf = s.mainFont + hMode = False + t.bMode = False + t.bMode2 = False + lMode = False + t.yMode = False + t.codeMode = False + t.citeNum = 0 + t.textMode = False + + # 绘制函数闭包 + def ChangeLockColor(color) -> None: + nonlocal t + t.lockColor = color + draw.text_lock_color = color + + def ChangeLinkMode(mode: bool) -> None: + nonlocal t + t.linkMode = mode + draw.under_line_mode = mode + + def ChangeDeleteLineMode(mode: bool) -> None: + nonlocal lMode, t + lMode = mode + draw.delete_line_mode = mode + + def ChangeBlodMode(mode: bool) -> None: + nonlocal hMode, t + hMode = mode + draw.text_blod_mode = mode + + # ========== 4. 逐字绘制 ========== + + t.nowlatexImageIdx = -1 + imageIdx = -1 + islatex = False + + t.idx: int = -1 + while t.idx < t.textS - 1: + t.isImage = False + nowObjH = t.nowf.size + t.idx += 1 + i = text[t.idx] + t.xidx += 1 + size = t.nowf.GetSize(i) + xs, ys = size[0], size[1] + + islatex = False + + # 公式 + if t.latexs and t.latexs[0]["begin"] < t.idx < t.latexs[0]["end"]: + t.nowlatexImageIdx += 1 + if t.nowlatexImageIdx >= len(t.latexs[0]["images"]): + t.idx = t.latexs[0]["end"] - 1 + t.nowlatexImageIdx = -1 + del t.latexs[0] + continue + else: + islatex = True + space = t.latexs[0]["space"] + i = t.latexs[0]["images"][t.nowlatexImageIdx] + sz = t.latexs[0]["images"][t.nowlatexImageIdx].size + xs, ys = [sz[0], sz[1] + space * 2] + nowObjH = ys + + # 跳过 + if t.idx in t.skips: + if t.idx in t.linkends: + ChangeLinkMode(False) + continue + if t.idx in t.linkbegins: + ChangeLinkMode(True) + if t.idx in t.linkends: + ChangeLinkMode(False) + continue + + # 行首空格 + if t.xidx == 1 and not t.codeMode and i == " ": + while t.idx < t.textS and text[t.idx] == " ": + t.idx += 1 + t.idx -= 1 + t.xidx = 0 + continue + + # 标题 + if not t.textMode and i == "#" and not t.codeMode: + if t.idx + 1 < t.textS and text[t.idx + 1] == "#": + if t.idx + 2 <= t.textS and text[t.idx + 2] == "#": + t.idx += 2 + t.nowf = s.font1 + else: + t.idx += 1 + t.nowf = s.font2 + else: + t.nowf = s.font3 + while t.idx + 1 < t.textS and text[t.idx + 1] == " ": + t.idx += 1 + continue + + # 无序列表 + elif ( + not t.textMode + and i in ["*", "-", "+"] + and t.idx + 1 < t.textS + and text[t.idx + 1] == " " + and not t.codeMode + ): + t.idx += 1 + h = min(t.hs[t.yidx - 1], s.font3.size) + sh = int(h / 6) + zx, zy = s.lb + t.nx + int(h / 2), s.ub + t.ny + int(h / 2) + 1 + draw.polygon( + [(zx - sh, zy), (zx, zy - sh), (zx + sh, zy), (zx, zy + sh)], + s.unorderedListDotColor, + ) + t.nx += int(h) + while t.idx + 1 < t.textS and text[t.idx + 1] == " ": + t.idx += 1 + continue + + # 有序列表 + elif not t.textMode and i.isdigit() and not t.codeMode: + tempIdx = t.idx - 1 + flag = False + number = "" + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + if text[tempIdx].isdigit(): + number += text[tempIdx] + elif text[tempIdx] == ".": + flag = True + break + else: + break + if flag: + t.idx = tempIdx + h = t.hs[t.yidx - 1] + sh = int(s.codeBlockFontSize * 0.67) + zx, zy = ( + s.lb + t.nx + int(h / 2), + s.ub + t.ny + int(t.hs[t.yidx - 1] / 2) + 1, + ) + draw.polygon( + [(zx - sh, zy), (zx, zy - sh), (zx + sh, zy), (zx, zy + sh)], + s.orderedListDotColor, + ) + sz = s.fontC.GetSize(number) + draw.text( + (zx - int((sz[0] - 1) / 2), zy - int(s.fontC.size / 2) - 1), + number, + s.orderedListNumberColor, + s.fontC, + ) + t.nx += h + while t.idx + 1 < t.textS and text[t.idx + 1] == " ": + t.idx += 1 + continue + else: + t.textMode = True + + # 引用 + elif not t.textMode and i == ">" and not t.codeMode: + t.citeNum = 1 + while t.idx + 1 < t.textS and text[t.idx + 1] == ">": + t.citeNum += 1 + t.idx += 1 + if not t.yMode: + drawEffect.rectangle( + ( + s.lb + t.nx, + s.ub + t.ny - s.lineb // 2, + s.lb + t.nx + t.nmaxX, + s.ub + t.ny + t.hs[t.yidx - 1] + s.lineb // 2, + ), + s.citeUnderpainting, + ) + for k in range(t.citeNum): + drawEffect.line( + ( + s.lb + t.nx + s.citeb * (k), + s.ub + t.ny - s.lineb // 2, + s.lb + t.nx + s.citeb * (k), + s.ub + t.ny + t.hs[t.yidx - 1] + s.lineb // 2, + ), + s.citeSplitLineColor, + 5, + ) + t.nx += s.citeb * (t.citeNum) + 5 + t.yMode = True + t.xidx -= 1 + while t.idx + 1 < t.textS and text[t.idx + 1] == " ": + t.idx += 1 + continue + + # 代码块 + elif ( + not t.textMode + and t.idx + 2 <= t.textS + and text[t.idx : t.idx + 3] in ["```", "~~~"] + ): + name = "" + while t.idx < t.textS - 1 and text[t.idx + 1] != "\n": + t.idx += 1 + name += text[t.idx] + drawEffect.rectangle( + ( + s.lb, + s.ub + t.ny, + s.lb + t.nmaxX, + s.ub + t.ny + s.codeUb + s.fontC.size, + ), + s.codeBlockUnderpainting, + ) + draw.text( + (s.lb + s.codeLb + 2, s.ub + t.ny), + name[2:], + s.codeBlockTitleColor, + s.fontC, + ) + if not t.codeMode: + t.fontK = t.nowf + t.nowf = s.fontC + else: + t.nowf = t.fontK + drawEffect.rectangle( + ( + s.lb, + s.ub + t.ny - s.lineb, + s.lb + t.nmaxX, + s.ub + t.ny + s.codeUb, + ), + s.codeBlockUnderpainting, + ) + t.ny += s.codeUb + t.nx += s.codeLb + t.codeMode = not t.codeMode + continue + + # 表格 + elif ( + not t.textMode + and i == "|" + and t.formIdx + 1 < len(t.forms) + and t.forms[t.formIdx + 1]["beginIdx"] == t.idx + and not t.codeMode + ): + t.formIdx += 1 + formData = t.forms[t.formIdx] + form = formData["form"] + rowSizes = formData["rowSizes"] + colunmSizes = formData["colunmSizes"] + formHeight = formData["height"] + formWidth = formData["width"] + t.idx = formData["endIdx"] + # ny += lineSpace + halfFormLineSpace: int = s.formLineb // 2 + exterNum = 0 + bx, by = ( + int(s.lb + halfFormLineSpace), + s.ub + t.ny + exterNum + halfFormLineSpace, + ) + + # 表格背景 + draw.rectangle( + ( + bx, + by, + int(s.lb - halfFormLineSpace + formWidth), + s.ub + + t.ny + + int(halfFormLineSpace) + + s.formLineb * len(rowSizes) + + sum(rowSizes), + ), + s.formUnderpainting, + ) + + # 表头背景 + draw.rectangle( + ( + bx, + by, + int(bx - halfFormLineSpace * 2 + formWidth), + by + rowSizes[0] + s.formLineb, + ), + s.formTitleUnderpainting, + ) + + # 横线 + for num in rowSizes: + draw.line( + ( + int(s.lb + halfFormLineSpace), + s.ub + t.ny + int(halfFormLineSpace) + exterNum, + int(s.lb - halfFormLineSpace + formWidth), + s.ub + t.ny + int(halfFormLineSpace) + exterNum, + ), + s.formLineColor, + 2, + ) + exterNum += num + s.formLineb + draw.line( + ( + int(s.lb + halfFormLineSpace), + s.ub + t.ny + int(halfFormLineSpace) + exterNum, + int(s.lb - halfFormLineSpace + formWidth), + s.ub + t.ny + int(halfFormLineSpace) + exterNum, + ), + s.formLineColor, + 2, + ) + + # 竖线 + exterNum = 0 + for num in colunmSizes: + draw.line( + ( + int(s.lb + halfFormLineSpace) + exterNum, + s.ub + t.ny + int(halfFormLineSpace), + int(s.lb + halfFormLineSpace) + exterNum, + s.ub + t.ny + int(formHeight - halfFormLineSpace), + ), + s.formLineColor, + 2, + ) + exterNum += num + s.formLineb + draw.line( + ( + int(s.lb + halfFormLineSpace) + exterNum, + s.ub + t.ny + int(halfFormLineSpace), + int(s.lb + halfFormLineSpace) + exterNum, + s.ub + t.ny + int(formHeight - halfFormLineSpace), + ), + s.formLineColor, + 2, + ) + + # 单元格文字 + formRow = len(form) + formHeadNum = len(form[0]) + + formTextX = s.formLineb + formTextY = s.formLineb + + for ii in range(formRow): + formTextX = s.formLineb + + for j in range(formHeadNum): + formNx = 0 + formNy = 0 + formTextIdx = -1 + formText = form[ii][j] + formTextSize = len(formText) + + while formTextIdx + 1 < formTextSize: + formTextIdx += 1 + char = formText[formTextIdx] + formCharX = s.mainFont.GetSize(char)[0] + + if formNx + formCharX > colunmSizes[j]: + formNx = 0 + formNy += s.mainFont.size + + draw.text( + ( + s.lb + formTextX + formNx, + s.ub + t.ny + formTextY + formNy, + ), + char, + s.formTextColor, + s.mainFont, + ) + + formNx += formCharX + + formTextX += colunmSizes[j] + s.formLineb + + formTextY += rowSizes[ii] + s.formLineb + t.ny += s.lineb * (formData["endIdx"] < t.textS) + formHeight + continue + else: + t.textMode = True + + # 颜色 + if len(t.colors) and t.colors[0]["beginIdx"] == t.idx: + ChangeLockColor(t.colors[0]["color"]) + t.idx = t.colors[0]["endIdx"] + del t.colors[0] + continue + + # 加粗 + if ( + i == "*" + and t.idx + 1 < t.textS + and text[t.idx + 1] == "*" + and not t.codeMode + ): + t.idx += 1 + ChangeBlodMode(not hMode) + continue + + # 删除线 + if ( + i == "~" + and t.idx + 1 < t.textS + and text[t.idx + 1] == "~" + and not t.codeMode + ): + t.idx += 1 + ChangeDeleteLineMode(not lMode) + continue + + # 行内公式 + if ( + i == "$" + and (text[t.idx - 1] != "\\" if t.idx >= 1 else True) + and (t.idx + 1 < t.textS and text[t.idx + 1] == "$") + and not t.codeMode + and not t.bMode2 + ): + tempIdx = t.idx + flag = False + while tempIdx < t.textS - 1: + tempIdx += 1 + if ( + text[tempIdx] == "$" + and tempIdx + 1 < t.textS + and text[tempIdx + 1] == "$" + ): + flag = True + break + if flag or t.bMode: + if not t.bMode: + if t.xidx != 1: + t.nmaxX = max(t.nx, t.nmaxX) + t.maxxs.append(t.nx) + t.nx = t.codeMode * s.codeLb + t.ny += t.nmaxh + s.lineb + t.xidx = 0 + t.yidx += 1 + t.hs.append(t.nmaxh) + t.nmaxh = int(s.fontC.size / 3) + t.citeNum = 0 + t.dr = 0 + + t.fontK = t.nowf + t.nowf = s.get_gfont(t.nowf) + fs = t.nowf.size + + xbase = t.nmaxX // 2 - t.maxxs[t.yidx - 1] // 2 + + drawEffect.rectangle( + ( + xbase + s.lb + t.nx - 1, + s.ub + t.ny, + xbase + s.lb + t.nx + 1, + s.ub + t.ny + t.hs[t.yidx - 1], + ), + s.expressionUnderpainting, + ) + + else: + xbase = t.nmaxX // 2 - t.maxxs[t.yidx - 1] // 2 + + drawEffect.rectangle( + ( + xbase + s.lb + t.nx - 1, + s.ub + t.ny, + xbase + s.lb + t.nx + 1, + s.ub + t.ny + t.hs[t.yidx - 1], + ), + s.expressionUnderpainting, + ) + + t.nmaxX = max(t.nx, t.nmaxX) + t.maxxs.append(t.nx) + t.nx = t.codeMode * s.codeLb + t.ny += t.nmaxh + s.lineb + t.xidx = 0 + t.yidx += 1 + t.hs.append(t.nmaxh) + t.nmaxh = int(s.fontC.size / 3) + t.citeNum = 0 + t.dr = 0 + + fs = t.nowf.size + t.nowf = t.fontK + + t.bMode = not t.bMode + + t.nx += 2 + t.idx += 1 + continue + + if ( + i == "$" + and (text[t.idx - 1] != "\\" if t.idx >= 1 else True) + and not t.codeMode + and not t.bMode2 + ): + tempIdx = t.idx + flag = False + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + if text[tempIdx] == "$": + flag = True + break + if flag or t.bMode: + if not t.bMode: + t.fontK = t.nowf + t.nowf = s.get_gfont(t.nowf) + fs = t.nowf.size + else: + fs = t.nowf.size + t.nowf = t.fontK + t.bMode = not t.bMode + # zx,zy = lb+nx,ub+ny+hs[yidx-1] + drawEffect.rectangle( + ( + s.lb + t.nx - 1, + s.ub + t.ny, + s.lb + t.nx + 1, + s.ub + t.ny + t.hs[t.yidx - 1], + ), + s.expressionUnderpainting, + ) + t.nx += 2 + continue + + # 行内代码 + if ( + i == "`" + and (text[t.idx - 1] != "\\" if t.idx >= 1 else True) + and not t.codeMode + and not t.bMode + ): + if not ( + t.xidx == 1 + and t.idx + 2 <= t.textS + and text[t.idx : t.idx + 3] == "```" + ): + tempIdx = t.idx + flag = False + while tempIdx < t.textS - 1 and text[tempIdx + 1] != "\n": + tempIdx += 1 + if text[tempIdx] == "`": + flag = True + break + if flag or t.bMode2: + if not t.bMode2: + t.fontK = t.nowf + t.nowf = s.get_gfont(t.nowf) + fs = t.nowf.size + else: + fs = t.nowf.size + t.nowf = t.fontK + t.bMode2 = not t.bMode2 + zx, zy = s.lb + t.nx, s.ub + t.ny + t.hs[t.yidx - 1] + draw.rectangle( + (zx, zy - fs - 2, zx + 2, zy), s.insertCodeUnderpainting + ) + t.nx += 2 + continue + + # 普通图片 ![alt](src) + if ( + imageIdx + 1 < len(t.images) + and t.idx == t.images[imageIdx + 1]["begin"] + ): + imageIdx += 1 + t.idx = t.images[imageIdx]["end"] + t.nowImage = t.images[imageIdx]["image"] + t.isImage = True + xs, ys = t.nowImage.size # type: ignore + nowObjH = ys + + # 代码块背景 + if t.xidx == 1 and t.codeMode: + drawEffect.rectangle( + ( + s.lb, + s.ub + t.ny - s.lineb, + s.lb + t.nmaxX, + s.ub + t.ny + t.nowf.size, + ), + s.codeBlockUnderpainting, + ) + + # 换行 + if i == "\n": + t.nx = t.codeMode * s.codeLb + t.ny += t.nmaxh + s.lineb + t.xidx = 0 + t.yidx += 1 + if t.ny + t.hs[t.yidx - 1] > PYL: + t.ny = 0 + s.lb += tlb + s.rb + t.nmaxX + t.nmaxh = int(s.fontC.size / 3) + t.textMode = False + t.citeNum = 0 + if ( + t.nowf != s.mainFont + and t.nowf not in [s.fontG, s.font1G, s.font2G, s.font3G] + and not t.codeMode + ): + draw.line( + (s.lb, s.ub + t.ny - 2, s.lb + t.nmaxX, s.ub + t.ny - 2), + s.idlineColor, + ) + if not t.codeMode: + t.nowf = s.mainFont + t.yMode = False + continue + + # 自动换行 + if t.nx + xs > s.maxX: + t.nx = t.codeMode * s.codeLb + t.ny += t.nmaxh + s.lineb + t.yidx += 1 + t.nmaxh = int(s.fontC.size) + try: + if t.ny + t.hs[t.yidx - 1] > PYL: + t.ny = 0 + s.lb += tlb + s.rb + t.nmaxX + except Exception: + pass + if t.citeNum: + t.nx += s.citeb * (t.citeNum - 1) + 5 + if t.yMode: + drawEffect.rectangle( + ( + s.lb, + s.ub + t.ny - s.lineb // 2, + s.lb + t.nmaxX, + s.ub + t.ny + t.hs[t.yidx - 1] + s.lineb // 2, + ), + s.citeUnderpainting, + ) + for k in range(t.citeNum - 1): + drawEffect.line( + ( + s.lb + s.citeb * (k + 1), + s.ub + t.ny - s.lineb // 2, + s.lb + s.citeb * (k + 1), + s.ub + t.ny + t.hs[t.yidx - 1] + s.lineb // 2, + ), + s.citeSplitLineColor, + 5, + ) + + # 文字颜色 + b = s.title1FontSize - s.fontSize + normalColor = tuple( + int( + s.textColor[i] + + (s.textGradientEndColor[i] - s.textColor[i]) + / b + * (t.nowf.size - s.fontSize) + ) + for i in range(min(len(s.textColor), len(s.textGradientEndColor))) + ) + if t.linkMode: + normalColor = s.linkColor + + if islatex: + xbase = 0 + + if t.latexs[0]["super"]: + xbase = t.nmaxX // 2 - t.maxxs[t.yidx - 1] // 2 + else: + xbase = 0 + img: pillowlatex.LaTeXImage = t.latexs[0]["images"][t.nowlatexImageIdx] + drawEffect.rectangle( + ( + s.lb + t.nx + xbase, + s.ub + t.ny, + s.lb + t.nx + img.width + xbase, + s.ub + t.ny + t.hs[t.yidx - 1], + ), + s.expressionUnderpainting, + ) + imgText.alpha_composite( + img.img, + ( + s.lb + t.nx - img.space + xbase, + s.ub + t.ny + (t.hs[t.yidx - 1] - img.height) // 2 - img.space, + ), + ) + elif t.isImage and isinstance(t.nowImage, Image.Image): + imgImages.alpha_composite( + t.nowImage.convert("RGBA"), + ( + int(s.lb + t.nx), + s.ub + t.ny + t.hs[t.yidx - 1] - t.nowImage.size[1], + ), + ) + elif t.bMode or t.bMode2: + if t.bMode: + drawEffect.rectangle( + ( + s.lb + t.nx, + s.ub + t.ny + t.hs[t.yidx - 1] - t.nowf.size - 2, + s.lb + t.nx + xs, + s.ub + t.ny + t.hs[t.yidx - 1], + ), + s.expressionUnderpainting, + ) + draw.text( + (s.lb + t.nx, s.ub + t.ny + t.hs[t.yidx - 1] - t.nowf.size - 2), + i, + s.expressionTextColor, + t.nowf, + ) + elif t.bMode2: + drawEffect.rectangle( + ( + s.lb + t.nx, + s.ub + t.ny + t.hs[t.yidx - 1] - t.nowf.size - 2, + s.lb + t.nx + xs, + s.ub + t.ny + t.hs[t.yidx - 1], + ), + s.insertCodeUnderpainting, + ) + draw.text( + (s.lb + t.nx, s.ub + t.ny + t.hs[t.yidx - 1] - t.nowf.size - 2), + i, + s.insertCodeTextColor, + t.nowf, + ) + elif t.codeMode: + draw.text( + (s.lb + t.nx, s.ub + t.ny + t.hs[t.yidx - 1] - t.nowf.size - 2), + i, + s.codeBlockTextColor, + t.nowf, + **dict.fromkeys( + [ + "use_under_line_mode", + "use_delete_line_mode", + "use_blod_mode", + ], + False, + ), + ) + else: + draw.text( + (s.lb + t.nx, s.ub + t.ny + t.hs[t.yidx - 1] - t.nowf.size), + i, + normalColor, + t.nowf, + ) + + t.xidx += 1 + t.nx += xs + t.nmaxh = int(max(t.nmaxh, nowObjH)) + + ChangeLockColor(None) + ChangeBlodMode(False) + ChangeDeleteLineMode(False) + ChangeLinkMode(False) + + imgEffect.alpha_composite(imgText) + imgEffect.alpha_composite(imgImages) + + + outImage.alpha_composite(imgEffect) + + if bt and paintImage: + outImage.alpha_composite( + paintImage, + (int(txs - s.rb - paintImage.size[0]), tys - paintImage.size[1] - s.db), + ) + + if s.decorates: + outImage.alpha_composite(s.decorates.DrawTop(int(txs), tys)) + + return outImage diff --git a/astrbot/core/utils/t2i/pillowmd/mixfont.py b/astrbot/core/utils/t2i/pillowmd/mixfont.py new file mode 100644 index 000000000..73e82588e --- /dev/null +++ b/astrbot/core/utils/t2i/pillowmd/mixfont.py @@ -0,0 +1,97 @@ +import os +from typing import Dict +from PIL import ImageFont +from PIL.ImageFont import FreeTypeFont +from fontTools.ttLib import TTFont +import pillowlatex +from pathlib import Path + + +class MixFont: + """混合字体类""" + + _size_cache: Dict["MixFont", Dict[str, tuple[int, int]]] = {} + _font_cache: Dict[str, "MixFont"] = {} + _latex_font_cache: Dict[str, pillowlatex.MixFont] = {} + + def __init__(self, path: str, size: int = 10) -> None: + # 字体路径 + self.path = os.path.abspath(path) + # 字体名称 + self.name = os.path.basename(self.path) + # 字体大小 + self.size = size + # 字体的 FreeTypeFont 对象 + self.ft_font: FreeTypeFont = ImageFont.truetype(self.path, size) + # 字体字符集 + self.font_dict = self._load_cmap(self.path) + + @staticmethod + def _load_cmap(font_path: str) -> set[int]: + """返回字体支持的字形 Unicode 码位集合""" + try: + with TTFont(font_path) as tt: + return set(tt.getBestCmap().keys()) + except Exception: + return set() + + # -------------- 公有接口 -------------- + def ChoiceFont(self, char: str) -> FreeTypeFont | None: + """返回能渲染该字符的字体""" + if ord(char) in self.font_dict: + return self.ft_font + + def CheckChar(self, char: str) -> bool: + """判断主字体是否支持该字符""" + return ord(char) in self.font_dict + + def GetSize(self, text: str) -> tuple[int, int]: + """计算文本在字体下的宽高""" + if not text: + return 0, 0 + + # 优先使用缓存 + cache = self._size_cache.setdefault(self, {}) + if text in cache: + return cache[text] + + # 确定可用字体 + use_font = self.ft_font + for ch in text: + if not self.CheckChar(ch): + alt = self.ChoiceFont(ch) + if alt: + use_font = alt + break + + bbox = use_font.getbbox(text) + size = int(bbox[2] - bbox[0]), int(bbox[3] - bbox[1]) + cache[text] = size + return size + + @classmethod + def GetMixFont(cls, font_path: str | Path, font_size: int) -> "MixFont": + """工厂方法""" + font_path = str(font_path) + if not os.path.isfile(font_path): + raise FileNotFoundError(f"配置的字体未找到:{font_path}") + + # 缓存 key + key = str(hash((os.path.abspath(font_path), font_size))) + if key in cls._font_cache: + return cls._font_cache[key] + + cls._font_cache[key] = cls(font_path, font_size) + return cls._font_cache[key] + + @classmethod + def MixFontToLatexFont(cls, mix_font: "MixFont") -> pillowlatex.MixFont: + """将 MixFont 转换为 pillowlatex.MixFont""" + key = str(hash((mix_font.path, mix_font.size))) + + if key not in cls._latex_font_cache: + cls._latex_font_cache[key] = pillowlatex.MixFont( + font=mix_font.path, + size=mix_font.size, + ) + return cls._latex_font_cache[key] diff --git a/astrbot/core/utils/t2i/pillowmd/style.py b/astrbot/core/utils/t2i/pillowmd/style.py new file mode 100644 index 000000000..f2e2d1ede --- /dev/null +++ b/astrbot/core/utils/t2i/pillowmd/style.py @@ -0,0 +1,180 @@ +# pillowmd/style.py +from __future__ import annotations +from typing import Optional, Union, TypeAlias, Literal +from pathlib import Path +from dataclasses import field, dataclass +from .decorates import MDDecorates +from .mixfont import MixFont + +# ---------- 类型别名 ---------- +mdPageLineStyle: TypeAlias = Literal["full_line", "dotted_line"] +mdColor: TypeAlias = Union[tuple[int, int, int], tuple[int, int, int, int]] + + +@dataclass +class MdStyle: + """ + Markdown 生成风格 + 字段顺序、默认值、注释与 setting.yaml 保持 1:1 对应 + """ + + # 基本信息 + name: str = "Astrbot娘" # 主题名称 + intr: str = "Astrbot的默认样式" # 主题简介 + author: str = "Zhalslar" # 作者 + version: str = "1.0" # 版本号 + stylePath: str = ( + "data/t2i_styles/astrbot_style" # 主题样式文件总路径,支持相对/绝对 + ) + + # 资源目录(相对于 stylePath) + backgrounds: str = "backgrounds" # 背景图片目录 + images: str = "images" # Markdown 引用图片/缓存目录 + paintPath: str = "" # 立绘图片(autoPage=True 时生效) + + # 字体文件路径(相对于 stylePath/fonts/) + font: str = "default.ttf" # 正文字体 + titleFont: str = "fdefault.ttf" # 标题字体 + expressionFont: str = "STIXTwoMath-Regular.ttf" # 公式字体 + codeFont: str = "default.ttf" # 代码字体 + + # 字号 + fontSize: int = 25 # 正文字号 + title1FontSize: int = 70 # 一级标题 + title2FontSize: int = 55 # 二级标题 + title3FontSize: int = 40 # 三级标题 + expressionFontSizeRate: float = 0.8 # 公式字号 = 正文字号 * 该比例 + codeBlockFontSize: int = 15 # 代码块字号 + remarkFontSize: int = 14 # 备注字号 + + # 页边距 + rb: int = 200 # right distance 右边距 + lb: int = 200 # left distance 左边距 + ub: int = 200 # up distance 上边距 + db: int = 200 # down distance 下边距 + + # 画布最大宽度 + maxX: int = 1000 # 单行元素最大像素宽度 + + # 代码块 / 表格内边距 + codeLb: int = 20 # 代码块左右留白 + codeUb: int = 20 # 代码块上下留白 + formLineb: int = 20 # 表格行间距 + lineb: int = 10 # 普通行间距 + citeb: int = 30 # 引用竖线间距 + + # 页面分割线 + pageLineColor: mdColor = (253, 205, 207, 150) # RGBA + pageLineStyle: mdPageLineStyle = "dotted_line" # full_line | dotted_line + + # 列表符号颜色 + unorderedListDotColor: mdColor = (234, 149, 123) # 无序列表 + orderedListDotColor: mdColor = (241, 207, 131) # 有序列表符号 + orderedListNumberColor: mdColor = (240, 240, 233) # 有序列表数字 + + # 引用块 + citeUnderpainting: mdColor = (196, 237, 237) # 引用背景 + citeSplitLineColor: mdColor = (74, 72, 114, 200) # 引用竖线 + + # 代码块 + codeBlockUnderpainting: mdColor = (253, 205, 207, 180) # 代码块背景 + codeBlockTitleColor: mdColor = (227, 95, 130) # 代码块标题文字 + codeBlockTextColor: mdColor = (80, 89, 162) # 代码块正文 + insertCodeUnderpainting: mdColor = ( + 253, + 205, + 207, + 180, + ) # 行内代码背景 + insertCodeTextColor: mdColor = (77, 84, 139) # 行内代码文字 + + # 正文颜色 + textColor: mdColor = (98, 79, 137) + textGradientEndColor: mdColor = (186, 99, 133) # 标题渐变终止色 + linkColor: mdColor = (132, 162, 240) # 超链接 + + # 公式 + expressionUnderpainting: mdColor = (74, 72, 114) # 公式背景 + expressionTextColor: mdColor = (244, 248, 248) # 公式文字 + + # 备注 / 表单 + remarkColor: mdColor = (212, 234, 151) # 备注文字 + formTextColor: mdColor = (105, 83, 118) # 表格文字 + formLineColor: mdColor = (105, 83, 118) # 表格线 + formUnderpainting: mdColor = (212, 227, 205, 255) # 表格行背景 + formTitleUnderpainting: mdColor = (245, 213, 100, 90) # 表头背景 + + # 分割线 + idlineColor: mdColor = (186, 99, 133) # 标题下方分割线(预留) + + # 背景(已提前处理) + #background: dict + + # 装饰图 + decorates: Optional[MDDecorates] = None # 由 StyleManager 实例化后注入 + + # 其它杂项 + expressionTextSpace: int = 10 # 表达式边缘间距 + autoPage: bool = True # 是否默认自动分页 + remarkCoordinate: tuple[int, int] = (30, 2) # 标题备注坐标 (x, y) + + # 延后初始化的字体(不在 YAML 出现,由 __post_init__ 填充) + mainFont: MixFont = field(init=False, default=None) # type: ignore + fontG: MixFont = field(init=False, default=None) # type: ignore + fontC: MixFont = field(init=False, default=None) # type: ignore + font1: MixFont = field(init=False, default=None) # type: ignore + font1G: MixFont = field(init=False, default=None) # type: ignore + font2: MixFont = field(init=False, default=None) # type: ignore + font2G: MixFont = field(init=False, default=None) # type: ignore + font3: MixFont = field(init=False, default=None) # type: ignore + font3G: MixFont = field(init=False, default=None) # type: ignore + fontR: MixFont = field(init=False, default=None) # type: ignore + + + + def __post_init__(self) -> None: + # 保证资源目录存在 + sp = Path(self.stylePath).resolve() + self.paintPath = str(sp / self.paintPath) + (sp / "fonts").mkdir(parents=True, exist_ok=True) + (sp / "backgrounds").mkdir(parents=True, exist_ok=True) + (sp / "images").mkdir(parents=True, exist_ok=True) + + # 加载字体 + if self.mainFont is not None: # 已初始化 + return + base = Path(self.stylePath).resolve() / "fonts" + self.mainFont = MixFont.GetMixFont(base / self.font, self.fontSize) + self.fontG = MixFont.GetMixFont( + base / self.expressionFont, + int(self.fontSize * self.expressionFontSizeRate), + ) + self.fontC = MixFont.GetMixFont(base / self.codeFont, self.codeBlockFontSize) + self.font1 = MixFont.GetMixFont(base / self.titleFont, self.title1FontSize) + self.font1G = MixFont.GetMixFont( + base / self.expressionFont, + int(self.title1FontSize * self.expressionFontSizeRate), + ) + self.font2 = MixFont.GetMixFont(base / self.titleFont, self.title2FontSize) + self.font2G = MixFont.GetMixFont( + base / self.expressionFont, + int(self.title2FontSize * self.expressionFontSizeRate), + ) + self.font3 = MixFont.GetMixFont(base / self.titleFont, self.title3FontSize) + self.font3G = MixFont.GetMixFont( + base / self.expressionFont, + int(self.title3FontSize * self.expressionFontSizeRate), + ) + self.fontR = MixFont.GetMixFont(base / self.font, self.remarkFontSize) + + + # 工具:根据主字体返回对应公式字体 + def get_gfont(self, font: MixFont) -> MixFont: + return { + self.font1: self.font1G, + self.font2: self.font2G, + self.font3: self.font3G, + self.mainFont: self.fontG, + self.fontC: self.fontG, + self.fontR: self.fontG, + }.get(font, self.fontG) diff --git a/astrbot/core/utils/t2i/renderer.py b/astrbot/core/utils/t2i/renderer.py index 122189f93..786d6a9bb 100644 --- a/astrbot/core/utils/t2i/renderer.py +++ b/astrbot/core/utils/t2i/renderer.py @@ -12,33 +12,40 @@ def __init__(self, endpoint_url: str | None = None): async def initialize(self): await self.network_strategy.initialize() + #await self.local_strategy.initialize() async def render_custom_template( self, tmpl_str: str, tmpl_data: dict, - return_url: bool = False, options: dict | None = None, + return_url: bool = False, + use_network: bool = True, ): """使用自定义文转图模板。该方法会通过网络调用 t2i 终结点图文渲染API。 - @param tmpl_str: HTML Jinja2 模板。 - @param tmpl_data: jinja2 模板数据。 + @param tmpl_str: HTML Jinja2 模板 / Markdown 文本。 + @param tmpl_data: jinja2 模板数据 / pillowmd渲染器样式模版 @param options: 渲染选项。 @return: 图片 URL 或者文件路径,取决于 return_url 参数。 @example: 参见 https://astrbot.app 插件开发部分。 """ - return await self.network_strategy.render_custom_template( - tmpl_str, tmpl_data, return_url, options - ) + if use_network: + return await self.network_strategy.render_custom_template( + tmpl_str, tmpl_data, return_url, options + ) + else: + return await self.local_strategy.render_custom_template( + tmpl_str, tmpl_data, options + ) async def render_t2i( self, text: str, - use_network: bool = True, - return_url: bool = False, template_name: str | None = None, + return_url: bool = False, + use_network: bool = True, ): """使用默认文转图模板。""" if use_network: @@ -50,6 +57,6 @@ async def render_t2i( logger.error( f"Failed to render image via AstrBot API: {e}. Falling back to local rendering." ) - return await self.local_strategy.render(text) + return await self.local_strategy.render(text, template_name) else: - return await self.local_strategy.render(text) + return await self.local_strategy.render(text, template_name) diff --git a/astrbot/core/utils/t2i/style/base/backgrounds/1.2.200.png b/astrbot/core/utils/t2i/style/base/backgrounds/1.2.200.png new file mode 100644 index 0000000000000000000000000000000000000000..69a6cb704e1899f6e83821e860beae554fa2a961 GIT binary patch literal 11296 zcmbVycU+T8x9+Rx#*PInAg~n`0Ra_hf{A4VA_5x`vIQX)Bti_48cK={Q3SK4ZfaBn z6ohPn5FwC=Gyx$}1HlkFQbGuU6w+=y=R4*5?)l@~JIUnt%bS_WtXXT;de$?e=vNE_ zTQAr<+5@Xr0l+Hd3s4LK=Kz(}tADwYu2pYpsM=Ix=kB4ZQ8hDo;svHXv;URtL_h0KYstkt95#3Kh$Yl>RdQrb|d7$`VBjG z?cSq#@R0st1H%*M7M51lC(r$6XYX*{@q+th4^PM+SG;ce-SUUs4hRel3y(lWMnyk- z6#F>t$cTVSXKSGzM-+H`AbV{S9ecuAESSO zIWjsnJ~27$W(_Ahd6Q_8h^%^H<8sz2pgwHl?Y zD%;kq-FNJl?PuInuLtkgfBgPB^|LQteW+WnXLe~p<3>p5hMfmaj2z_s6z$(6``-!n z;Qvdq{}k-MofxTPY)4D^wY((_`NeA{MkIR?DAAD4)6 zmKZC5mJJJZSuJk*a_=Nj)qsQWCbFAPqs3?SRoypvYqBl-@rjR1$QZ$fM?^X*z1PeELLX!^pP zBL~-7RG=W!;c#MVugtC3PTgaxx|<#FuT^6LO4617N!+0T28r@iJKtho4~g5)MdX2H z)e2zxvd3}JmAlwQu_j@Gh(4nLK)Pa0u-vdr0sPZ)QXk0a1bLMFH5DUE`!_wokNf798qj{n{}UEWOHjEP@I`D9@U!bxK~%V4;uE)>8@qCW@IGmSu6aX{5{c zjSoo(q0&!d^9dV7Rg-3gk0QNANw$=XKc&{!IP4`<`)@q7v=)0UVoEQQ2i_|6?lY~3d8Vc> z-&*V0h7>Hz$7%Aqp}GB*MV$#Q;%wXHNAr!EcL>abDBFIoT9ven!eg7RL8JgqKG<=5#E~( z?9A6W8w7IOVpzp*l49VmQ_^F=eFk@9H;@+Ej+SWbIZP?hdX|vswS2V_ncp`BTcD2} zBr%?q)~tO$qX3vI6P4_;8MgmX1rRWwIEiB!BI4REni}(O>g5_0i_&?=2S=7uD}o1c z0ki3YwDKj|(MCZ@ESf#UG0bu!qx(CKTEC~SM+4oUVRGt@HJ4vWDQu%YL1Y@FhqM^6G(S=acB`mE9 zck--2v42xOPAeV>JwjadsNr(hthN0X$ItC9GtMD}Fs<9QlUz8}lVP+_iyKKR9)623 zCvIcoZbuTXvSqIZ?Y}s5B3byCSa=il^_P-M6 z6+pflq==DQsmq7mKdz3Rb&Wo0LK zNS{)PeFVPJ-)e(Lpa-yRKL;>V07&SHhdEl{_VDp`_X%nxyH)N`n9zvvH}WXF*$e-Q zMks)Tk`Yx|6L={V-d)^EHNiE+HT$aYaumS4t>sG$O>#lVjnY9os)K)RtDO23T@>6i z9O_$e?ae~!We>JdH#K2Ysj~Oi_5E1H{*~ya7Ovl~+C?CKbab$HpXcw>eJ#kK+^YsT z#Yw@*$t^;2!bsF5?)ms14igns-z{NzTfwPtNE~OMciQ`K&rUIz|81szWa9C&!czw^ z7!L)Ym(_z_Ti|o0MWY6HE8{~Y;;SU8WteOmEb2Z2(h0B-Jk|aRhG)aV26HS!f!IvOIj4-Iq3QTz8`F zx5`R<>wPm)h|6(D+uZ16_s%QPLu6UpINcV^GZ9m}Q8byuX~M5-Do2BxT}U-=UY80E zl4trlxZ*6AlmL0er{Rfke;~MIJwxdW8OeAlpP8^ zDyRFJ@?I^}P`56`-NTKTD1b*O-M||8z~eSKNXOBA{7+nsmHzzr*slRKlegTl=k4lBsN7p8N?}?h|pDzyxdJemuiX^xlHHXI_9pOU9#cmkZD&*{lC- zgS(BstpHvt19G}gD#r1?{aRh7M$N;S6uL4zRDe$4I(I67w$fHSM=eoz$&R)-TSk0$ z^zf%V$yxHBm`fRpY(ZQTeq}#f9Dc>^Kgad-STol7AC*DuCa-6@W>x zA^1NBEo!Cazs7Sm44qlN;LrwT>S}`jeX@2KC%b>l0&EEtU|Lyh%FuC!IWB%3!9T8n>Y7pLXW1|BDEGz>1y3T4DD#Q6 z*0WIKEDyK(7!#5vzC{WR3z}d0wtQR!MsRR1tkHe!m@-gCSy`M*rBh7U;>bnL)#QZi zT-U1iboIzwwM_w&qaOTQ;F*yYEiu4{PJ1$8N(gwlSBum`~vpJdGY|KZJkTc9-B&D$8ej3lVda8PpKKK#&qQ@7yU{ zvgY5c6Nj{ulYR+N4TL=bkE0d}Wwi?6$A_yWU4eJ)?uH>;CHrSER6k|Zy}~CKwtf%$ zBE=NvP`097dWqnX198GW8{1mlUN56sgT%fb6H~AvDOx{Pm zC@V5Gf3mCncvhVLLLAQjy3?OWN_34n(?R7|H1{}LU{_{ zUR1jYyz_S6KvbL{T?p0{spj}~Ci_0K(`ow(uAo(k6u>9j*+U7LOJ0WszSm{>GJ3Oo z)zp;}kk_3KWqh@NjH+I$GRBA{x$cqbGr|y>3{GY${l&zYNyDH)+aR{tR@K%wi!l(K z9cB#T2|nf0F*OB|9@KAxtwAGQOBcRwk_(^X6vJn#8{%|g|g&ekc zQrh}xZ?Q@p*SCJb^*1GkBJ=hOn}l~206fykbwB~EBMG?rZTx*nTI@eHLNm6i4ZWLA z9m`zNmTKjFY0RV_5b~i?IK3IBjNwl9+tAg%95~}mUqt^06|M>1P=ZK8`vz%CtcbN z#u@4Aw{7AsnzkqCG*uxST)O0@x4j(VZB2`1_)C?1TA4Y!+)PFYeKI9$$T~Ow#{ej} zDa7ajQevMuAq;d!l`{o!Y`Z0l9UeA%x9-S+oaINoL`Il=IiK-;`QnQE=kx{N>1|K^ z*yT1K_4fETL-Ql)Pw(97vt6^|QzT9&|FM|&MXR!PPnDI*{qNnN^^vcINKCF=LNK*;NB*V!3)rRPN0r?$BVlE28X>Bap?_WLHrAA< zy}Yn!jFh(v0zkryvg5kZ>F0 zC;?66An&G1+6E|et+@F?s~HFPZd*vU0;qGqjeGsWcSiKig4YZ&d@`HeJHePYc9U3P zY7>g+P>&gofh7HGi%pQFbKC{u^z?xX+k2u8$Bjl}WaYCyt0S4_&b=PF^IWBW*K5meRX@ zgod#ZLj5rTLC0AE=vw0TEAzt!>&<&dvrHy2EOjh!6+P*u{_nh+r4nDXYHK8aiA@~J7B;>fWpo| zci%_=MVpYUSTLxt8KxAooVv%`(f@;iL6N zTO5!VhKMOtgFy$0UgZ56n@~-f{>!+F3_L`LEr*{$(AU&ICIt@p^B{Xz-SVFEm+-e%8_r+ zSsXBcV@n1GYHJxmrG4oi>`CjJlbq6gmdUJYT6>fU!MibLZDV_58EE?2;H1gA!H<5S z>;+;P_Q1foVOOR@y{8hRJl0j06)G``p9C`SzNfBj%D<~!Xfb6wNhpwaGvn?d(%7Rr zla;P?@9`;#HMXl7&%EoH{?|<#i!?kpoZWoR_d1W>tVw?!#uj-|wJGxU4+{+GgK((v zL3xkloC5+ppK~Uz)v%5Kik+PhUV8O7@ra#Cq*beNRlw`S-0Z2mkP&(N~0{ZjR`1`6}QX#*%G`dGI_#I6Ei0r=!o7F z!}$8S#wgVD)y~n$Hz~=Tm*b2gVoFg)Z|0WE%d3P|7hk_Ga<3nqnEO6*yVat0x+h@? z4r|c}FfYieRr|FYeSIVm*0?Kpv+0~>7zNZpxSi%|x(>y^=W?DqdlmVl=BkNl|FomP z=6b>=E?q@Ze=1bWI5n*DE`Yj==SjK#R+f5#T_&!io~1EuoBec;Nhl$%z?6CGbn>aD zlD$b5Q`Rj_;75#$$5%F>I}F5EkU~t`EuptSG*Oyf@%vlmgUXWHq=?>H1iW=#Uenxp z(z2--yjgmLapT*dM5_ru9%XjDP~xI*Lxr5vL_GO>suW`v8cm*y8)ccD{f1v*tIy=( zq~~!VwnXDNDVZO!w+SU^c5#k&_(W6bkNk~^cI_q7%F*U|+(nYw!F+iqAKexqV}6LN zAz!O`$I4!?E@nbF2S@I|g%6oiyJ(~N3cx{5@053%zKVyk*9kCR!C$HMx$yq{v+C1L znFDvII0hl6)|H-zZ@hNQW5{g_%)sDsYE^b&&>!6t(ktDk15~Gq?45DlLz)XcI(sW_ zk0C9hzo|tk=?uTrwNrTVan6LSNLSe&HEA+FwcC2{f{P8Koq9lI#M2svJu!ia z_8|mxwOK8+OzUf<>zo2G0HACin-kQVEoQvLkIi}-c+&^C+pg+jxk2xHdEMydjYxri z^5pa)E6jtrGbxq8nog85q(V=$i=iyl~93 zyfYux)fZAzff5pVK04(urP28M%vAPcv|Ffvb*b6k9BkSq@n2BFdJjzv{EbxK!U(fj zUu%g|pu?C(Zq^8RbBl~Pnh0%|9L#0wwJ#=I0(VHl$36Yr7xHEHwmT_rg9&UBEOm&oJ_eUe&0Kv67GpiH8zdl#ORMlrM{J1Db&`> zm$1U;h=bl?uwXlN$fNN8&b#OsC?7EiChBfid<}Rm>BH?CX0P-GQJV_}5q#LH71VbBvpF(!!xsm+wJA53?nZwz1HUpR=j?s+T-jXz;VEeT?&Lk5=ZLl{wWdqws^i z)#HU>H7r(=Q(r3={@tHA+z$UN-}85MpDC@9tH%ddn1c@*uYBBwop#jTZQ3@S+*gI$ z5=m(g%GWBhKY#wEfdc&@(&B#WuLWoLs|Yo#W__pLh?rgcI$q>sF|M5BZPRp-0*?GW zY>)M?5nNxr&0{ktGOEe+p#A^}6(q@16+^z9-I`ozf4s&kI*?%GT10xysvSJoc{>SO zKG6}HZ}>+%?sH)KY=C}&P?%O-7=z({T2kA9`y54dm1V$X$pwelX2M+5ixewK!_M!m z*bKqjBky;esiAd~Z1x7$w=F_D6o7l3|42wls@}WNTE>}$g47WLSaO^(H-uI8eJ-h- z(v2jzJ4p9uLIgqqV*ob_Q*x)$X89zYl8qTU38{V|=ryx*&&@5`d<8|zqS8xO&|lSb zOAAK>YHaeRGnM-#V;2)#ZhLC#J^MySUzTj&-(ARS&`GdKL_F>xR%K@BKy3`d1vdxE z^}geTH+!rf8=P5Z-(%&-OnSw5dJn1;KT5cd z8@Uy^!+n9RBxk9E6Sy~GP*8i)8v-h1%H~*4I5CH$BtSMxVLhbHH@tBiSG7oRTYIH= zpS)Z0$AFLuiEE4Gcam@ZJ=-l(9jhe1oH;^0(L<|PddH*uzPR1=Z_Z`~aAfps7xKn4 zd577oPh{lDB8ITqgovqzw$4b5YSrk+GCZO~SLQcZq#PN4Upo+R@Yau>Oj7Dxb(1;x zI(Lt(ur8W#57bPSZ&Ndp9|8qo8G?5vN)!pfC&O5h_S~8=0tQXu}-SmG`fw zTDF&zge?hl)u@%Kgu*RhA|*o`jFTPoTK1a28bt1r?{vK%4&E%INNhM%$ck&~OC% zDCHrc_Ib|iYWnD@xFnI+8+PA;e6TMjo$En}|VK6$h}G0Vw`oqF)rn&oPI%&fkFQRo%d z%jR4qo9#!JWhm1RnrXTaS7RppIGsteL*+Q!d+{QE5F)mHb$tY#U+Wa+tu9<=}qqE=LBfoDZ*|Sg-pj-wggLkSW&?d8JUG(s$!DiDl79Q1 zi0K0?LiJcoX(gok+YejlXyVPfp##nvoJ}RV4&9*wj2dS>_{HRY3RcO;WQAJD9h-u? zs*ANm<~Ap)DwEq|`J@H=yXS3nq90xjs^u**M)l+F)L4!t>Y)-|vdj1!ePK-YdF=Ub z_Mw_@XPbSiisT#nkYS0AVOl@r&|z`9@Tytvz4;CYtPxo&z2ljCq4ojJtr9}e%9864 z%RHZb$T9QWw%FhXuN|>sl4k(Y*r!jJZt<=b1$r;bByGH(A6N}mF70-XO{?UHjl;aO zDU~oe6B0F^9YM6=omL(eBSq85(cKDQG+Tr$36is_l*t{@riHW~u_)!697@;ybq|Yw z%Rxs0ER>(CU6{ImqTR+VZcg~8nCchP`ys<8&hY#Xhv?cd+$P-Tnr4GzCUszdP zqnW}o_y~&gu`c@C{rOjACik`Te~$QefHD#{vLCt6pdh{n7Fa|kDL{a`9e};&%5i?B z_e@wSxxScUhR&P%0dJRUOZR^iWsG`b;Pp6lg(!W$8V6^-XNOGF0jk&9-?^|w z8e~N*GHL-CNR23j-#_vou?VRw(1(WXM#ai|KAj(x%_Uaq8lWs&K|yiZkf(nQ`<%c0 zF782SQu&YZ>Nf)CA6b>}4u-7z-0E^MC_F%laK2KxOi3s& zs0h__TthuaX4{~Gnq6v*=-7i!QBwo;wz?ENEK_FqW>p6lV=gTAc6GF2aSpnA0-E=3bdPV zsW6x|nqlgGldrom+VW^$wmEg0!jg}~w(s-I4z#Mw>})b|T(K&g4hU%pk2n4aY6=JB zQDOc&G>v!FnLNfSziI{P;&nMv>{JRI}$V85oJSUCb~+`#T!Ub9hW` z9(CRkG>9j^&vngF=M&Ow^MdT%gwM_T#~~ll#M(dcoU$bzX_~ER{IwDKZ^ji76R=DD%gm%DI?6 zy30w%ts@AN@VIB_M60S(bAsqFFPlKlJQ<<(CAh34;hn7yJd_+`Tnplu^4XAiUke^s zx^HNAZ6ByzKr6o^qi2*yOkI}rTg~RC4l7e=2hP6t=)mMg74K)QK9+M-@1S#dvkv-t zO$9(d#sH7aSwtrmHqhfXhGT9{c(Gv^Vz!IL#na-)-Mwcx&_j`iYNFr3x45ymon#DA zz7@%Vijv1*gV+J(xyNkPq9BMR)QULP?De@b&+%I}M(&?WhhNbzA-M=h+>*{IvO!C0 z^1vaQ?(7!<{^_4@bV;UlYtE1y1e3qurW@gGqbb+Ho1RYW0bzq%)8HQ%LOWg?+%?>6 zCHGkJiPA7M#JgmIl_!o{!bdd618st+Kdn%S4L;b!#QwKq+y6=(>;R3_QG${p-t?`M zl;b};7mcW7Ti}cdL6hrfh7Vk>+#5!fc!`SziD?M;QT@lp=1;(XFHu}cn1^mdCLnh8 z?gRn_nt3W=wUixWt!-pjF1Q;y7rh6&ZS2G4g;vkW0H|wkvDkR1?UHb=dxS!Ga+3YT z)^*eoP2W*CAZ;so2{Sr!bK>j{nb+HCZeK0Afw1M5;zClwJ6Rswa;2X?adXYKj=5#+ zTBCZbUO=A^q@6i)Ug(M-x1wK=L*E9S+>7^`l-}fxHEPB^BANFD$p`(ZkPO5`qteqW zXL##k!dA5rsHMX?UN6DiZWon25XkWpIQe%<9vf{wQuZK6RZtcnm$Psg78=oCx z%5y)B??VG3FQmxPq=G|0YTYS866Sv}fG%rEd#r>qTe5TIX|(YpL>Y zJ%t_St_K>Y5UgD*FHc`JjGgW<<6Z%)V-Jc@=N7(KdR@Sj!sq<_e`{)XmtKh3F@04x zmSl`I+Bagly9K}F2bd>@Rf4}qjkoF2cYPU5zCN5CW@W8G7;{x-V(_5aGUyU}?4klF zk-Q9X*#+p9?9Omd^YIKxnW)hsAMxO7dB;Rt{g9CCnN$rbHmtXuiBGkES05 z2`M27vz|GJ*qD9C-BjCwA=GO&*W=5Be(riD`g=;q__^z+2r^GFs(fBHN%uYJImIC= zfJ1F#U`dDq=;}9`lBlUflIu3Et*uS(ry90U9_mJ zB);WPv`JNG_!{}wg|s}f1lqWVk1MmS8i@pVLZ%4qf3B0CwSWbWR?WP%J)2|h$C_J- ziV}lr)0(Gxr{CMWvp3hU)3(klN+NZ8N~UI2)M- zPFX~-3}1?W-;VWnQ(kN{6Fsb}R_4zN;AW!QC#q>TZbY|hoUf$BNnDT(VeU@gemL^G zz0=jGudM_MGC9KgmBw^5CK=o9_Uf;xk?k<$0o%8h?5Tnl4u~GSOGZ+XE<|dd`Jue| z5-x65z9%r?vuJj8gbFI?zpc{`yTJ+!@w#KR{b(D)s86baaguY&XQb5f_( z#-B|Vzx~2KDn7X-1g`tL0!YpjnJP0GqHI6$9lXAo5u9A80W)SpW>*GL#gv{E(PU(e z?@o224jz7tDdT+OXD$W)tl|}9X!loYGkwVxEXWW!ltl97+i2TG(O{18&3bUa;)#oI zph$^BsuouE{YZ?)6|ri>vAR;#x@z1Lbd11$K_^|H{R@q|1H(rc_tYV<;#%17}d9W*R&(R<$H^bFQW|WMJdTy_R@HT8)eLHo}<|qHtxc~7Crx^G@^s4FX literal 0 HcmV?d00001 diff --git a/astrbot/core/utils/t2i/style/base/backgrounds/2.2.200.png b/astrbot/core/utils/t2i/style/base/backgrounds/2.2.200.png new file mode 100644 index 0000000000000000000000000000000000000000..afdbc84cb19c7591afbd575722591d6c63d9a3ac GIT binary patch literal 1958 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 literal 0 HcmV?d00001 diff --git a/astrbot/core/utils/t2i/style/base/backgrounds/3.2.200.png b/astrbot/core/utils/t2i/style/base/backgrounds/3.2.200.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa81ea3e66f0fd838d8ac03801106a929e0e001 GIT binary patch literal 5150 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 KzwdDrIQUQPoL21s literal 0 HcmV?d00001 diff --git a/astrbot/core/utils/t2i/style/base/backgrounds/4.2.200.png b/astrbot/core/utils/t2i/style/base/backgrounds/4.2.200.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b694c91012da05a5c438bb776c04c9a9a20638 GIT binary patch literal 2146 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 literal 0 HcmV?d00001 diff --git a/astrbot/core/utils/t2i/style/base/backgrounds/5.2.200.png b/astrbot/core/utils/t2i/style/base/backgrounds/5.2.200.png new file mode 100644 index 0000000000000000000000000000000000000000..64e49fb489b7eee5b20ac6e3b6c36d5acce19506 GIT binary patch literal 2147 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 literal 0 HcmV?d00001 diff --git a/astrbot/core/utils/t2i/style/base/backgrounds/6.2.200.png b/astrbot/core/utils/t2i/style/base/backgrounds/6.2.200.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5b5083715b8085119fe45e4c5765d1a863fcd3 GIT binary patch literal 4885 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 E0Mx!o*#H0l literal 0 HcmV?d00001 diff --git a/astrbot/core/utils/t2i/style/base/backgrounds/7.3.200.png b/astrbot/core/utils/t2i/style/base/backgrounds/7.3.200.png new file mode 100644 index 0000000000000000000000000000000000000000..e34a8cc27b69045aec5554d565d663ab82504c3c GIT binary patch literal 3046 zcmeH_YgAL&6~|9VVt79^AUZ+{j%a03i^zx~WEcjbpfU&|f|x-{5hx~lYy zv-kf0_CD})_yy2+b3Nh;5C{Mest>?i;0%yzYU@j7DAhu%qtPf7S`&lWpsuZ{t*xc0 zrKO|0QC~;bKvzpk-$>tJ6V}ksP+M=au@TmIBi0bRo&PwF}hPxLK(XmgH~s-bDL*?7y=9Tq!x{d)I4 z+mH6!9XROxsf#P&@DVpJ?~^{Kd{6rY{Vw?TA?HKGqGMv?$ngo3FaLP?tF$X$r+<4R zD?2AQ?`D2!*>~j?w=1je+^fIe&`57;Zh83Qqo0_p&aTJ(1JBrlL(hjf<1Z&(O-}Kr zXJ$oNTH(09u4cOmt8K}6_P$(n{v(AN3BdZ)~fI^#DZ`kPMi3yC_ zWWM*3I`)(6C3PJd+igxP7@i~bX&QaFZ+wSn9qkvge-145-y-`f*jp|R&_*Iu!$TSX zJW$w|rdt+FYwjxj;{X1i?}2$!6Lrui$A`OBVz;y1(%xN!qFiNKWOjX{==he~!l#>9 zS}ZOJZ|(Wb!16YkkxZ_*HMQ-kzMd^nPLLCp$%|04u8^#y_Yje%Qb1oCl<);sT94oBFAj9Jm@nRWa{ly;FXjMMB34ya?Rw2 zwTAoUjSnOPLjx@%2^H5q=nm?7;O=WCKgvIFj2p$IT&HHeuS!Q^0?L{*OuK2qgc1u9 zxW_5DR%*(9LZsPO{{HO62|8;&x_D<)uhVipt3TJKna-{vah15lvqSUcHIV&uoZ*c- z@u?0612?kxhaFeC0@|#(`Q?hbN{E$qLs<+1hy8noDy;kK8TX-jh#a_6z9fXf>6yi% zye?BQPrjwEqdgKj%b5|RjI=P^3zHijkuTn@`)Gw*(qSSR&B(YS3=9p9sH1tMCcbRW zu1ExX8R1rcJkF@}bUncQ>J& zk$Ia|G&po_UaDX{SF)vgJP7JBZJN0%sqqiLGB}UH2gW)BbL4|LtdzONZj(R0a75dg7~2Bp(YK|D0VCF2i?>(TcmuOZv{7A%ttW zTSi=?6l@wZEG%D1b#M*ZM0nMi@}etZB$`XjzLAh1?as{&l~a>4k`&7BC0$o_Og>Ff zrYMuQ%J976$W;b0E4BwnOL_y;igZYh!Q?S|ser$1b-cem(l*mVWc7KP(57H=e*|mG ztm{D^vXof@15;CvRcKAjW1P)nxqT;HR1a#XC+@Yss$8~PYAg`r$=ej6%~G54%SV(V znpKQM{F!AyF@b`j8EydV?G;cC2yJCaL^|^O2q99%o&s

y>9>0qh{d4kb zk+_<{-I}%*pMal%!O{RpK?yS1Eh&BPW6x?X>~61d&ly{gbEJ%9t8m$v z^Y?cPy&f6N45;Ve4>~O~-Gnn#9(#}QnzQoIp<*!%WHZevZPwK6LRD*T$y+t>W2)Bn zdSr>2hnFk(&wHpkONpz}ArF74kiB|FAgtZqdO7%OI&(xsH)JB(EAJ1N-P+G3gCfD4a^2%^LnxldorIz@JgR(QzA zF42de))g51aHv0B++tZhoRANL^H8)124BQyX24)_K#76Dy&-$zVNaiu;GmYA*w-)0 zUc&&lg6WprybFUTxRuRfTIKZZ$1%?MSJ{f(2^avGMfxfy{Y;w2>Ju0ohZZAOFigi^ z!5{~>uxG|svTTbbeZWd@KG~M0Jht8m?LK0(C&7#;2vOL`EBy){8tPqi%ky zqf*(sqME16Z5UYj@1CnHTi1l4SFf?O-bQ;vA#3MhP&%L@ugNBRdrHFakH6%yl|h&P zCLCX{+z0iAs+#HZxb@Di)dt+8lW-OW)(>IuZU)@DumNmrvR~%npQI8fZyb6jL*_fQ gwX^AtH3Zpb|J`1_s{-rk5@U?UdVc)B=s0-z&+7WFuK)l5 literal 0 HcmV?d00001 diff --git a/astrbot/core/utils/t2i/style/base/backgrounds/8.2.200.png b/astrbot/core/utils/t2i/style/base/backgrounds/8.2.200.png new file mode 100644 index 0000000000000000000000000000000000000000..7b45b72a88e38b9fa4994c75fd43c005c7ccee91 GIT binary patch literal 4344 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 literal 0 HcmV?d00001 diff --git a/astrbot/core/utils/t2i/style/base/paint.png b/astrbot/core/utils/t2i/style/base/paint.png new file mode 100644 index 0000000000000000000000000000000000000000..42fa107c8ae98dddb26c23d73e78763b6f48d82e GIT binary patch literal 633829 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

XuqIke`e*w~#vxa)EfDar^0mkWtc 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 AnBy$6jmhWs%{KcSGt06w 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