最近笔记转换到了Obsidian,所以想开发了一个Obsidian插件
震求很简单,把Obsidian里面的笔记一键发布到公众号,在这个里面有个小的需求,需要把mermaid图转换成图片自动上传微信
类似hexo中的hexo-filter-mermaid-diagrams插件
hexo-filter-mermaid-diagrams 是一个用于 Hexo 的 Mermaid 插件。
它的核心思路不是“在构建时把 Mermaid 转成最终图片”,而是:
在页面中注入 Mermaid 脚本,等博客页面加载后,由浏览器再去渲染 Mermaid 图表。
但公众号里面不能这处理
微信公众号复制场景有个关键限制:
- 粘贴到公众号编辑器后,不能依赖额外脚本继续执行 Mermaid
比如一个流程图:

Mermaid 自定义样式渲染修复
问题:Mermaid 图表中使用 style 指令自定义节点颜色(如 style B fill:#e1f5fe)时,导出到 PNG 后节点显示为黑色背景,丢失自定义填充色。
根本原因:
- Mermaid 将自定义样式写入 SVG 元素的 inline
style属性 - Canvg 在光栅化时无法正确处理 inline
style的 CSS 优先级 <style>块中的默认主题规则(如.node rect { fill: #ECECFF; })覆盖了自定义样式
解决方案:
- 保留
<style>块(默认节点依赖它提供填充色和边框) - 提取 inline
style中的 SVG 属性(fill、stroke 等) - 为包含自定义样式的元素添加唯一 CSS 类
- 将提取的属性以
!important规则追加到<style>块末尾 - 同时设置 SVG presentation attributes 作为兜底
这样既保证默认节点的样式完整,又通过 CSS 优先级确保自定义样式正确渲染。
使用 Claude Opus 4.6 模型

使用gpt-5.3-codex 和 gpt-5.4 模型

这么一个需求,模型知错、认错的功夫杠杠的,但就是改不了错
模型切了好几个,token花费不少,可最终问题还是没有完美解决