Agent Skills
返回列表
💻

Vercel Satori HTML 转 SVG 图像生成器

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/satori-html-css-svg-image-generator

技能介绍

要解决的问题

服务端渲染动态分享卡片时,常见的做法是套用 Puppeteer 之类的无头浏览器,把 HTML 截图成图片。这条路代价很高:需要维护一个浏览器运行时,冷启动慢,容器里还得处理一堆系统依赖。Satori 换了个思路——不做浏览器,而是直接把 HTML/CSS 标记解析成 SVG。

它的典型场景是 Open Graph 图片、博客预览缩略图、品牌素材这类结构固定但内容动态的位图替代需求。

这个技能如何工作

核心能力可以拆成三层:

  • 标记解析:用一套类 JSX 的 API 描述要渲染的结构,而不是手写 SVG 标签。
  • 布局引擎:完整支持 Flexbox 布局,这是 Satori 与简单模板拼接方案的关键差异。
  • 字体渲染:文字必须通过指定的字体渲染,字体数据以 ArrayBuffer 形式传入。

关键步骤大致是:准备字体数据(从 fs 读取或 fetch 获取,转成 Buffer/ArrayBuffer)→ 用 JSX 描述布局 → 调用渲染接口 → 拿到 SVG 字符串。

运行时方面,Satori 可以直接跑在浏览器、Node.js(>= 16)和 Web Workers 中。底层 WASM 依赖被打包成 base64 字符串,在运行时加载,所以不需要额外的本地编译步骤。

适用边界与注意点

这是最需要提前想清楚的部分:

  • 字体是硬性要求。只要画面中出现文字,就必须显式指定字体并传入字体数据。不传字体就无法渲染文本。
  • 格式限制:目前只支持 TTF、OTF、WOFF 三种字体格式,WOFF2 暂不支持。如果你的字体库以 WOFF2 为主,需要提前转换。
  • CSS 子集:并非所有 CSS 特性都被考虑,例如 cursor 属性不在渲染范围内。
  • 资源加载:不支持通过标签引用外部资源,也不会去抓取网络图片,所有素材需要内联或提前处理。

换句话说,Satori 适合布局可控、内容可控的生成式图片场景。如果你需要完整的 CSS 支持、外部资源加载或复杂的客户端交互,它不是合适的选择。

使用场景

  • 团队搭建Open Graph社交卡片服务时,需根据每篇博客的标题、摘要和封面动态生成SVG格式的分享图,避免依赖浏览器运行时
  • 为品牌活动制作标准化的宣传素材时,需将不同产品的参数、活动规则等结构化数据渲染成统一风格的SVG品牌图,支持批量生成
  • 开发服务端博客预览缩略图功能时,需将文章正文的前几段文字和配图信息转换为SVG格式的预览图,满足高并发下的性能要求
  • 实现实时品牌素材生成功能时,需根据用户输入的动态信息(如活动名称、时间、地点)即时生成SVG格式的宣传图,无需等待浏览器启动

适合人员

  • 负责社交卡片生成的后端工程师,需要不用浏览器就能批量产出动态SVG图,降低服务端的资源开销
  • 负责品牌视觉素材的设计师,需要不用手写SVG标签,通过类JSX语法快速生成标准化的动态品牌图
  • 负责博客平台的前端开发者,需要为每篇文章生成高性能的SVG预览缩略图,同时避免引入复杂的浏览器依赖
  • 负责企业服务化工具的全栈开发者,需要将结构化数据渲染成SVG格式的业务报告图,支持跨平台无缝嵌入