diagram-png-exportlisted
Install: claude install-skill omeyang/Thoth
# 图表 PNG 导出与预览
这是用户在**所有项目**中的图表交付偏好,不限于某个仓库、文档站或业务。面向用户交付新增、修改或指定导出的图表时,默认同时提供独立 PNG,方便完整查看、下载和迁移。用户当次指定只要源码、其他格式或外观时,以当次要求为准。
## 默认结果
- PNG,白色不透明背景,浅色主题。只有用户另有要求时才附加 SVG。
- 按完整图表画布以 **4 倍分辨率直接渲染**,不把低分辨率截图放大。
- 保留原图内容、步骤、参与方、连线方向与布局。可以改善导出副本的文字对比度、标题框留白和画布边界。
- 按图表自身尺寸导出,避免被网页列宽、横向滚动容器或原 SVG 的 `viewBox` 裁切。
- 先在本机生成并逐张检查,再交付每张图片的名称和可打开的预览链接。用户自行确认和同步到 WIKI;本技能不包含 WIKI 写入。
- 保留原图和可重新生成的源码。单纯导出图片不替换正文中的原图,也不更改业务事实。
## 找全来源
先查看实际项目的源稿、构建方式、样式和已有图表工具,不假定存在 `src/`、`content/` 或某个构建脚本。
| 来源 | 处理方式 |
|---|---|
| Mermaid 代码块 | 优先复用与当前源稿一致的已渲染 SVG;缓存缺失时使用项目现有 Mermaid 渲染方式。本机 pretty-mermaid 可在适合时使用 |
| 手工内联 SVG | 提取完整 SVG,保留它自己的样式、`defs`、marker 和其他内部引用 |
| 已有独立 SVG | 检查是否依赖外部 CSS、字体或资源,再选择浏览器或 SVG 渲染工具 |
| 已有 PNG 等位图 | 优先交付清晰的原文件;像素不足时从矢量或图表源码重新生成 |
批量导出时,按页面顺序核对全部图及所属标题;不要只数 Mermaid 代码块,也不要用缓存目录的文件数代替当前页面图数。
## 渲染完整 PNG
优先复用项目可用的渲染工具。浏览器渲染可以用 Puppeteer 或 Playwright 配合无头 Chromium;先确认已有依赖、浏览器和字体的位置,不写死 Node.js 版本目录。
1. 在任务专用临时目录准备导出数据。每张 SVG 单独渲染,防止不同图的 CSS 类、变量和 marker ID 相互影响。
2. 加载该图实际依赖的项目样式和本地字体,固定为浅色主题。字体可内嵌为 data URL 或从本机服务加载,中文字体需要覆盖图中的字符。不要依赖外链字体。
3. 将页面设为白底、零页边距,取消 SVG 和容器的响应式宽度限制;保留图内样式与箭头定义。
4. 在图和字体插入页面后等待 `document.fonts.ready`,再用 `getBBox()` 测量可见文字与图形,跳过 `defs` 中的定义。
5. 将可见内容边界与原 `viewBox` 取并集,必要时扩大画布,并在扩展的一侧留出约 16 个逻辑像素。尤其检查最右侧的自调用说明和底部注释。边界测量未必包含完整描边、箭头或阴影,仍需实际预览。
6. 标题文字紧贴边框时增加框内留白;说明文字过浅时加深颜色。只调整导出副本。
7. 将 SVG 的 `viewBox`、显示宽高和浏览器 viewport 设置为完整画布,以 4 倍倍率生成 PNG。需要整数尺寸时向上取整。可以另外生成 1 倍小图用于检查。
Puppeteer 导出关键步骤示例;需先完成图表提取、样式加载和画布计算:
```js
await page.evaluate(