Skip to content

Daily-AC/SmartMd2Img

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AstrBot 智能Markdown转图片插件 ✨

一个更智能、更强大的AstrBot插件,能够自动检测复杂的Markdown格式并转换为高清图片,让您在QQ等平台的消息显示效果更加惊艳!🎉

🚀 全新智能特性

🤖 智能自动检测

插件现在拥有超强的大脑,能够自动识别以下复杂格式并智能转换为图片:

  • 💻 代码块 (python) - 带语法高亮和行号,智能缩进处理 🔧
  • 🧮 数学公式 (行内 $E=mc^2$ 和块级 $$\int_a^b f(x)dx$$) - 完美渲染LaTeX,支持KaTeX引擎 ⚡
  • 📊 表格 - 清晰的Markdown表格展示
  • 📝 复杂嵌套列表 - 多层结构清晰呈现
  • 🎯 多个标题组合 - 层次分明的文档结构
  • 📜 长文本内容 - 超过15行或包含多行长行的内容

🎯 智能保留策略

以下简单格式会保持文本直接发送,确保最佳用户体验:

  • 粗体斜体等简单样式
  • 📋 简单列表项
  • 🏷️ 单个标题
  • 🔗 链接内容(智能识别,保持可点击性)
  • 💬 短文本消息

⚡ 代码块增强功能

  • 🔧 智能缩进规范化: 自动将制表符转换为4个空格,确保代码显示一致
  • 📁 长代码文件发送: 超过阈值行数的代码可自动发送为文件 📄
  • 🎨 可配置字体大小: 自定义代码显示效果
  • 📏 行号显示: 清晰的代码行号,方便讨论和定位

⚙️ 超灵活配置

  • 🎛️ 自动检测开关: 可关闭自动检测,仅使用<md>标签
  • 📊 复杂度阈值: 精细调整触发转换的敏感度
  • 🏷️ 显式标签尊重: 可选择是否处理显式的<md>标签
  • 🎨 字体大小调整: 自定义代码和数学公式的显示大小
  • 📏 行高设置: 调整代码行高,优化显示效果

🌟 核心功能亮点

  • 🤖 智能Markdown转图片: 自动检测复杂格式并转换为清晰图片
  • 🧮 LaTeX 数学公式支持: 通过 KaTeX 完美渲染数学公式,速度更快更稳定
  • 🚀 自动浏览器安装: 插件自动安装和配置 Playwright Chromium 浏览器
  • 🎯 智能识别: 自动判断何时使用图片渲染功能
  • 🖼️ 高清渲染: 支持 2 倍缩放,生成超高质量图片
  • 📏 自适应宽度: 支持固定宽度或自适应宽度渲染
  • 🔄 向后兼容: 仍然支持原有的<md>标签方式
  • 🔧 代码缩进智能处理: 自动规范化代码缩进,解决格式混乱问题
  • 📁 智能文件发送: 长代码自动转为文件发送,提升用户体验

📥 安装指南

前置要求

  • 🐍 Python 3.8+
  • 🤖 AstrBot 框架

安装步骤

  1. 📁 将插件文件夹放置到 AstrBot 的 plugins 目录下
  2. 🔄 重启 AstrBot 服务
  3. ⚡ 插件会自动安装所需依赖(mistuneplaywrightbeautifulsoup4

🎮 使用方法

🤖 智能模式(推荐)

只需正常使用Markdown编写消息,插件会自动判断何时需要转换为图片:

这是一个简单的消息,粗体斜体会直接显示。✨

但当包含复杂代码时:

def complex_function():
    # 这段代码会自动转换为高清图片 🖼️
    for i in range(10):
        if i % 2 == 0:
            print(f"偶数: {i}")
        else:
            print(f"奇数: {i}")
    return "处理完成! 🎉"

数学公式也会自动转换:

行内公式:$E = mc^2$ 📐

独立公式: $$ \int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi} $$

长代码会自动发送为文件:📁

# 这是一个超过10(默认)行的代码示例,会自动转为文件发送
class DataProcessor:
    def __init__(self, data):
        self.data = data
        self.results = []
    
    def process_data(self):
        for item in self.data:
            processed = self._transform_item(item)
            validated = self._validate_item(processed)
            if validated:
                self.results.append(validated)
        return self.results
    
    def _transform_item(self, item):
        # 复杂的数据转换逻辑
        transformed = {
            'id': item.get('id'),
            'name': item.get('name').upper(),
            'value': item.get('value', 0) * 1.1
        }
        return transformed
    
    def _validate_item(self, item):
        if item['value'] > 100:
            return None
        return item

🛠️ 手动模式

如需强制转换,仍可使用<md>标签:

<md>
# 强制转换为图片 🖼️
即使这是简单内容,也会被转换为高清图片。
表格示例:
| 姓名 | 年龄 | 城市 |
|------|------|------|
| 张三 | 25   | 北京 |
| 李四 | 30   | 上海 |
</md>

🛠️ 新增命令功能

⚙️ 配置查看命令

/mdconfig

查看当前插件的所有配置信息,包括智能检测设置、代码处理选项等 📋

🧪 代码渲染测试命令

/test_code

测试代码块的渲染效果,验证语法高亮和行号显示是否正常 ✅

📚 支持的语法大全

  • ✅ 🎯 标题(#、##、###)
  • ✅ 📋 列表(有序、无序)
  • ✅ 💻 代码块(语法高亮 + 行号 + 智能缩进)
  • ✅ 📊 表格
  • ✅ 🧮 数学公式(LaTeX + KaTeX引擎)
  • ✅ ✨ 粗体、斜体、删除线
  • ✅ 💬 引用块
  • ✅ ➖ 水平分割线
  • ✅ 📁 代码文件发送(自动处理长代码)

🧮 数学公式示例

行内公式:$\mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^n a_i b_i$ 📐

矩阵运算:
$$
\begin{bmatrix}
a & b \\
c & d 
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
=
\begin{bmatrix}
ax + by \\
cx + dy
\end{bmatrix}
$$

积分公式:
$$
\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
$$

柯西-施瓦茨不等式:
$$
\left( \sum_{i=1}^n a_i b_i \right)^2 \leq \left( \sum_{i=1}^n a_i^2 \right) \left( \sum_{i=1}^n b_i^2 \right)
$$

⚙️ 详细配置说明

插件配置选项

{
    "auto_detect": True,              # 🎛️ 开启智能自动检测
    "min_complexity_score": 2,        # 📊 复杂度阈值(1-5)
    "respect_md_tags": True,          # 🏷️ 尊重显式<md>标签
    "separate_code_blocks": True,     # 💻 分离处理代码块
    "separate_math_blocks": False,    # 🧮 分离处理数学公式
    "render_code_as_image": True,     # 🖼️ 代码渲染为图片
    "send_code_as_file": False,       # 📁 长代码发送为文件
    "code_file_threshold": 10,        # 📏 文件转换阈值(行数)
    "render_math_as_image": True,     # 🧮 数学公式渲染为图片
    "code_font_size": 13,             # 🔤 代码字体大小
    "line_height": 1.5,               # 📏 代码行高
    "is_debug_mode": False            # 🐛 调试模式
}

支持的编程语言

  • 🐍 Python、JavaScript、Java
  • 🔷 C++、C、HTML、CSS
  • 🗃️ SQL、JSON、XML、YAML
  • 🐚 Bash、Shell、Markdown
  • 🔶 PHP、Ruby、Go、Rust、TypeScript
  • 等等...(共19种语言)🎯

🎯 智能检测规则

🚨 一定会触发转换的内容:

  • 💻 包含代码块 (```)
  • 🧮 包含数学公式 ($...$$$...$$)
  • 📊 包含Markdown表格
  • 🏷️ 显式使用<md>标签

⚖️ 可能触发转换的内容(基于复杂度评分):

  • 🎭 多个复杂元素组合
  • 📜 超过15行的长文本
  • 📏 包含多行超过80字符的文本
  • 🏗️ 复杂嵌套结构

📁 代码文件发送条件:

  • 📏 代码行数超过配置阈值(默认10行)
  • 🔤 语言在支持列表中
  • ⚙️ 文件发送功能已开启

🔧 技术实现细节

🎨 渲染流程

  1. 🔍 复杂度检测: 使用智能检测器分析Markdown内容复杂度
  2. 📝 解析 Markdown: 使用 mistune 将 Markdown 转换为 HTML
  3. 🔧 代码预处理: 规范化代码缩进,添加行号显示
  4. 🧮 数学公式处理: 通过 KaTeX 渲染 LaTeX 公式
  5. 🌐 浏览器渲染: 使用 Playwright Chromium 浏览器截图
  6. 🖼️ 图片生成: 生成 PNG 格式的高清图片
  7. 📁 文件处理: 长代码自动转为文件发送

💾 缓存系统

  • 🖼️ 图片缓存: 存储在 data/md2img_cache/ 目录,UUID文件名确保唯一性
  • 📁 文件缓存: 存储在 data/file_cache/ 目录,支持多种代码格式
  • 🧹 自动清理: 防止存储空间占用过多

🏆 核心优势

  1. 🤖 更智能: 无需手动标记,自动识别复杂格式
  2. ⚡ 更高效: 简单消息直接发送,减少不必要的图片生成
  3. 😊 更友好: 用户在QQ中既能复制简单文本,又能看到复杂格式的完美渲染
  4. 🎛️ 更灵活: 提供多种配置选项适应不同使用场景
  5. 🖼️ 更美观: 高清渲染,专业级的代码和数学公式展示
  6. 🔧 更稳定: 智能缩进处理,解决代码格式混乱问题
  7. 📁 更贴心: 长代码自动转为文件,提升阅读体验

🆘 常见问题与帮助

首次安装注意事项

首次运行时会自动安装依赖,请耐心等待并在控制台中跟踪进度。⏳

遇到问题怎么办?

  1. 🔧 关闭自动检测,仅使用<md>标签
  2. 📊 调整复杂度阈值参数
  3. 🌐 检查Playwright浏览器是否正确安装
  4. 🐛 开启调试模式查看详细日志
  5. 🔄 使用 /test_code 命令测试渲染功能
  6. 💡 考虑在提示词中明确要求使用<md>标签包裹需要渲染成图片的内容

性能优化建议

  • 💡 对于超长代码,启用"发送为文件"功能可显著提升体验
  • 🎨 根据显示设备调整字体大小(移动端建议12-14px)
  • ⚡ 数学公式推荐使用KaTeX引擎,速度更快更稳定
  • 📏 合理设置代码文件阈值,平衡图片和文件的使用

🔧 代码缩进问题解决

如果遇到代码缩进显示异常:

  1. ✅ 插件会自动将制表符转换为4个空格
  2. ✅ 统一缩进为4的倍数,确保对齐
  3. ✅ 支持复杂嵌套结构的缩进处理

如何反馈和贡献

欢迎在GitHub上提交Issue或Pull Request,分享您的使用体验和改进建议!🌟


🎉 让您的Markdown消息在任何平台都能完美展示!

🚀 立即体验智能Markdown转换,享受更流畅、更美观的沟通体验!

✨ 智能检测 + 高清渲染 + 贴心功能 = 最佳Markdown消息体验!

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages