大家好,我是何三,独立开发者
写文章难免会要给段落配图,需要根据文章内容自动生成配图。最初的想法很简单,直接调用AI的文生图API不就行了吗?但实际使用下来,发现这种方式存在不少问题。
今天我要分享一个更优雅的解决方案:通过AI生成HTML代码,然后用截图工具将HTML转换为图片。这个方案不仅成本更低,而且可控性更强。
传统AI文生图的痛点
直接调用AI的文生图API,看似简单直接,但实际使用中会遇到这些问题:
1. 成本较高
目前市面上的文生图API价格普遍不低。根据市场主流AI平台的文生图API价格大约在0.1元/张左右。如果每天需要生成几十张配图,成本会快速累积。
2. 可控性差
AI生成的图片风格难以精确控制。你想要一个简洁的流程图,AI可能给你一个艺术感很强的插画;你想要专业的数据图表,AI可能给你一个卡通风格的图片。这种不确定性对于需要保持品牌一致性的场景来说是个大问题。
3. 文字渲染不理想
AI文生图在处理文字时经常出错。中文字符可能会出现错别字、笔画缺失,英文单词拼写错误更是常见。对于需要包含大量文字信息的配图(如海报、信息图),这几乎是致命伤。
4. 布局难以精确控制
想要图片中某个元素在特定位置、某个区域显示特定内容,AI很难做到精确控制。每次生成的结果都可能不一样,需要反复尝试。
HTML转图片方案的优势
既然AI直接生成图片有这么多问题,那换个思路:让AI生成HTML代码,然后用工具将HTML转换为图片。这个方案的优势非常明显:
1. 成本大幅降低
文本生成API的价格远低于文生图API。根据市场主流AI平台的文本生成API价格大约在0.004-0.06元/百万tokens,而生成一张图片的HTML代码大约需要5000 tokens左右,成本仅为0.00002-0.0003元/张。相比直接文生图的0.1元/张,成本降低了300-5000倍!
2. 完全可控
HTML+CSS是成熟的网页技术,我们可以精确控制每个元素的位置、大小、颜色、字体等。想要什么风格就写什么样式,AI只需要负责生成内容结构即可。
3. 文字渲染完美
HTML中的文字由浏览器渲染,不会出现错别字、笔画缺失等问题。中英文混合、特殊字符都能完美显示。
4. 布局精确可控
使用CSS的flexbox、grid等布局技术,可以精确控制元素位置。想要居中就居中,想要靠左就靠左,完全按照设计稿来。
5. 易于维护和修改
如果需要调整样式,只需要修改CSS代码即可,不需要重新生成图片。批量修改风格也非常方便。

核心技术:capture-html截图工具
要实现HTML转图片,需要一个可靠的截图工具。我开发了一个基于Rust的命令行工具——capture-html。
capture-html的功能特性
- 🎯 精确截取指定ID的HTML元素
- 🖼️ 支持PNG和JPEG格式输出
- 🔍 自动查找系统中安装的Chrome/Edge浏览器
- ⚡ 轻量级,仅占用约6MB内存
- 🚀 支持自定义Chrome可执行文件路径
使用方法
capture-html.exe <html文件> <div元素id> <输出图片路径>
性能表现
在标准测试环境下:
| 指标 | 数值 |
|---|---|
| 平均耗时 | ~2.4 秒 |
| 最快 | 2.10 秒 |
| 最慢 | 3.07 秒 |
内存占用也非常友好:
| 进程 | 工作集内存 | 分页内存 |
|---|---|---|
| capture-html | ~6 MB | ~2.5 MB |
| chrome | ~13 MB | ~7.9 MB |
技术栈
- Rust - 系统编程语言
- chromiumoxide - Chrome DevTools Protocol客户端
- tokio - 异步运行时
- clap - 命令行参数解析
- anyhow - 错误处理

image-generator Skill实现
基于capture-html工具,我封装了一个image-generator skill,让AI能够方便地生成图片。下面是完整的skill源码:
name: "image-generator"
description: "通用图片生成工具,支持将任意 HTML 内容转换为图片。当用户需要生成自定义图片、海报、配图时调用此 skill。"
---
# 通用图片生成 Skill
## 功能说明
这个 skill 帮助用户将任意 HTML 内容转换为图片。通过 AI 生成 HTML 代码,然后使用 capture-html.exe 截图保存为图片。
## 使用场景
当用户需要:
- 生成自定义图片
- 创建海报或配图
- 将 HTML 内容转换为图片
- 制作带有特定样式和布局的图片
- 生成社交媒体配图
## 参数说明
- **第一个参数**: HTML 路径(必需)
- **第二个参数**: 要截图的元素选择器(必选, #capture-container)
- **第三个参数**: 输出文件名(可选,默认使用时间戳)
## 工作流程
1. **生成 HTML 代码**
- 根据用户需求生成 HTML 内容
- HTML 必须包含一个 id 为 "capture-container" 的 div 元素(或自定义选择器)
- 确保样式符合用户需求
- 只返回纯 HTML 代码,不要包含任何解释性文字
2. **保存 HTML 到临时文件**
- 生成随机文件名(如:`image_<timestamp>_<random>.html`)
- 将生成的 HTML 代码写入临时文件
- 临时文件保存在系统临时目录或项目临时目录
3. **执行 capture-html.exe 进行截图**
- 使用 `capture-html.exe <html文件> <div元素id> <输出图片路径>` 执行截图脚本
- 脚本会从临时文件读取 HTML 内容
- 使用 capture-html 截图并保存到指定位置
- 截图完成后可删除临时文件
## HTML 生成要求
生成的 HTML 代码需要满足以下要求:
`html
<div id="capture-container" style="width: {width}px; min-height: {height}px;">
<!-- 图片内容 -->
</div>
`
**通用设计规范**:
1. **容器要求**
- 必须包含一个具有唯一 id 的容器元素(默认 #capture-container)
- 容器尺寸可以通过 width/height 属性指定
- 确保内容在容器内完整显示
- **重要**:对于流程图、多层级内容等复杂布局,使用 `min-height` 而非固定 `height`,或预留足够的高度空间
2. **高度计算规则**(防止内容被裁剪)
- **估算内容总高度**:标题 + 所有卡片/元素 + 间距 + 边距 + 底部说明
- **预留安全边距**:在估算高度基础上增加 20-30% 的缓冲空间
- **使用 min-height**:推荐使用 `min-height` 替代固定 `height`,让容器根据内容自动扩展
- **示例计算**:
`
标题: 50px
5个卡片: 5 × 80px = 400px
4个箭头: 4 × 30px = 120px
底部说明: 60px
间距: 100px
内边距: 80px
总计: 810px
建议容器高度: 1000px (预留20%缓冲)
`
3. **布局对齐策略**
- **避免使用 `justify-content: center`**:当内容高度接近或超过容器高度时,居中对齐会导致上下内容被裁剪
- **推荐使用 `justify-content: flex-start`**:从顶部开始排列,确保内容完整显示
- **如需居中效果**:使用 `padding` 或 `margin` 来调整视觉居中,而非 flex 居中
- **错误示例**:
`
<!-- 容易导致内容被裁剪 -->
<div style="height: 600px; justify-content: center;">
```
- **正确示例**:
```html
<!-- 内容完整显示 -->
<div style="min-height: 800px; justify-content: flex-start; padding: 40px;">
`
4. **内容溢出处理**
- **避免内容溢出**:确保容器高度足够容纳所有内容
- **使用 flex-wrap**:对于横向排列的元素,允许换行:`flex-wrap: wrap`
- **调整间距**:适当减少元素间距以适应容器
- **使用滚动**(不推荐):如必须使用固定高度,可添加 `overflow: auto`,但截图时滚动条会被截取
5. **样式建议**
- 所有样式建议内联在 style 属性中
- 使用现代 CSS 特性(flexbox、grid、渐变等)
- 考虑响应式设计
- 使用合适的字体(Microsoft YaHei、PingFang SC、Arial 等)
6. **内容组织**
- 合理的层级结构
- 清晰的视觉层次
- 适当的留白
- 一致的设计语言
7. **流程图/架构图特殊规范**
- **容器高度**:至少预留 1000px 以上高度
- **使用 min-height**:`min-height: 1000px` 而非 `height: 600px`
- **对齐方式**:使用 `justify-content: flex-start` 从顶部开始排列
- **间距控制**:适当减少元素间距,如 `gap: 20px` 而非 `gap: 30px`
- **内边距**:使用 `padding: 30px` 而非 `padding: 40px`,节省空间
- **卡片尺寸**:适当减小卡片尺寸,如 `padding: 20px 40px` 而非 `padding: 30px 60px`
- **示例**:
`
<div id="capture-container" style="width: 800px; min-height: 1000px; display: flex; flex-direction: column; justify-content: flex-start; align-items: center; padding: 30px;">
<!-- 流程图内容 -->
</div>
`
4. **图片优化**
- 使用矢量图形(SVG)保证清晰度
- 控制图片大小
- 优化加载性能
- 考虑不同设备的显示效果
**输出要求**:
1. 只返回纯 HTML 代码,不要包含任何解释性文字
2. 所有样式必须内联在 style 属性中
3. 确保在指定尺寸内完美展示
4. **对于流程图、架构图等复杂内容**:
- 必须使用 `min-height` 而非固定 `height`
- 必须使用 `justify-content: flex-start` 而非 `center`
- 必须预留足够的高度空间(至少比估算内容高度多 20%)
- 必须确保所有内容都在容器内完整显示
### 执行截图
`
# 将 HTML 保存到临时文件后执行
capture-html.exe temp_image.html capture-container ./output.png
`
## 示例
用户输入:
`
生成一个图片,内容是一个渐变背景的卡片,显示"Hello World"
`
AI 生成 HTML:
`
<div id="capture-container" style="width: 800px; height: 600px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); display: flex; justify-content: center; align-items: center; font-family: 'Microsoft YaHei', Arial, sans-serif;">
<div style="background: rgba(255, 255, 255, 0.95); padding: 60px 80px; border-radius: 20px; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); text-align: center;">
<h1 style="font-size: 48px; color: #333; margin: 0; font-weight: 700; letter-spacing: 2px;">Hello World</h1>
<p style="font-size: 18px; color: #666; margin-top: 20px;">Welcome to Image Generator</p>
</div>
</div>
`
执行步骤:
1. 将 HTML 保存到临时文件(如:`image_1737680000_abc123.html`)
2. 执行截图命令:
`
capture-html.exe image_1737680000_abc123.html capture-container ./output/image_1737680000_abc123.png
`
3. 截图完成后删除临时文件
## 注意事项
1. 确保 Chrome 浏览器已安装在 `C:\Program Files\Google\Chrome\Application\chrome.exe`,或修改脚本中的路径
2. 输出目录会自动创建(如果不存在)
3. 文件名可以包含路径,如 `images/hello.png`
4. 支持的图片格式:PNG(默认)、JPEG、WEBP
5. 对于 JPEG 和 WEBP 格式,可以通过 quality 参数控制图片质量(0-100)
实际应用场景

这个image-generator skill在实际应用中非常有用:
1. 公众号配图生成
根据文章内容自动生成配图,风格统一,成本低廉。
2. 海报制作
生成活动海报、产品宣传图等,文字清晰,布局精确。
3. 数据可视化
生成数据图表、统计报告等,专业美观。
4. 社交媒体内容
生成小红书配图、微博图片等,快速批量生产。
总结
通过AI生成HTML代码,然后用capture-html工具转换为图片,这个方案相比直接调用AI文生图API,有以下几个核心优势:
- 成本极低:每张图片成本仅为0.00002-0.0003元,比直接文生图便宜300-5000倍
- 完全可控:HTML+CSS精确控制每个元素,风格统一
- 文字完美:浏览器渲染文字,不会出现错别字
- 易于维护:修改样式不需要重新生成图片
- 批量生产:适合大规模批量生成
当然,这个方案也有一定的学习成本,需要了解HTML和CSS的基础知识。但考虑到它的巨大优势,这点学习成本是完全值得的。
如果你也在开发需要自动生成图片的功能,不妨试试这个方案。
相关资源:
- capture-html项目:https://gitee.com/pojoin/capture-html
- image-generator skill:见上文完整源码