LINUX DO 帖子整理:【设计图完美转 code/figma】焚诀——image-to-code Skill
原文来自 LINUX DO · 开发调优,作者 Donyzh,标题「【设计图完美转 code/figma】焚诀来了!我把自己炼成了 skill!」。约 2.3k 浏览 / 327 赞 / 77 帖。项目完整开源(MIT):
yuzhworkhard-wq/image-to-code(帖内旧链接image-to-code-skill会 301 到此仓)。本文按「主帖流程 → Skill 核心规则 → 安装与触发 → 评论区精华 → 适用边界」整理,配图为原帖本地镜像。
01|这帖在解决什么
作者是设计师,真实日常很像流水线:
- 用 GPT Image 2 生移动端效果图;
- 自己抠图、去字、清背景、对齐;
- 再交给 Codex 做代码还原;
- 需要时再导入 Figma 微调。
社区里同时有大量「效果图很美,Codex 一还原就崩」的吐槽。作者的判断是:
提示词再怎么优化,AI 也没有审美;但可以把设计师自己的测量 / 切图 / 锁定坐标 / 验收流程,炼成一套不可偷懒的 skill。
于是产出了 Codex skill:image-to-code。
一句话定位:
不是重新设计,也不是随便 vibe coding;而是把当前选中的 UI 图当作视觉合同,做 750px 像素级还原 + 高清透明切图 + 手机端自适应,并可继续导出可编辑 Figma 图层。
作者自评:固定高度的单一手机界面,还原可到约 95%,切图清晰、无明显低分辨率糊图。
02|九步工作流(主帖原意)
只要触发该 skill,Codex 被约束按下面顺序走:
1. 检查图片元素
先通读整张 UI 图:元素、文字、尺寸、层级、哪些是文本、哪些必须切图。

(原图)
2. 尺寸统一到 750px
常见手机逻辑宽 375,2x 为 750。skill 强制把源图等比归一到 750px 宽,建立统一坐标系,方便测量与切图。

3. 建立 layers.manifest.json
manifest 是布局、切图、代码、Figma 的唯一数据源。禁止先写“看起来差不多”的页面,再回头补图。
4. 预览 bbox
切图前先把每个资源目标的位置、大小画出来,对齐完整外框(含阴影、浅色底、半透明边缘)。

5. 导出高清资源
生成 UI 图常像素不足。skill 强制把资源按 asset_scale_factor 放大到 2x / 3x / 4x 导出,但页面显示尺寸仍等于原元素外框——高清的是文件像素,不是布局被撑大。
6. 锁定画板并匹配资源
- 文本、简单矩形/圆/线/按钮底 → 代码化
- icon、插画、头像、复杂装饰 → 独立透明 PNG,按 manifest 坐标贴回

实测提醒:Codex 偶尔会偷懒,个别图背景没抠干净,所以 skill 里把透明审计写得很死。
7. 自适应
先产出 750px 锁定稿,再强制加外层 fit wrapper,验证 375px 及其他手机宽度;适配只能整体等比缩放,禁止对子元素重排。
8. 检查
分模块验收(矢量 / 文本 / 位图),750px 叠图对比,手机端截图复核。
9. 导出到 Figma(可选)
代码与 QA 完成后,基于同一份 manifest / code / assets 生成可编辑 Figma 图层规格或本地 importer。作者自己还做了 web to figma 插件(帖内多次被催更,截至整理时仍未正式放出)。
最终效果对照

(原图)

(HTML 文件)

(通过 web to figma 插件复制进 Figma 的效果)
03|Skill 的硬规则(比 README 更狠)
仓库核心是 SKILL.md。下面只提炼会真正改变行为的规则。
3.1 750px 是基准坐标,不是唯一显示宽
scale = 750 / source_widthfinal_width = 750final_height = round(source_height * scale)同一 scale 必须应用到:坐标、宽高、圆角、描边、阴影、渐变、字号、行高、字间距。
生产页必须再套一层:
scale_fit = min(1, availableWidth / 750)只缩放外层 wrapper;.artboard 仍是 750 宽锁定稿。
3.2 禁止“近似重绘”
下列一律算失败,哪怕页面“更规整、更清晰”:
- 用 lucide / Material / SF Symbols 等相似图标替换原图 icon
- 重画钱包、礼盒、徽章、头像等卡片插画
- 为了适配组件,改卡片高度、圆角、间距、图片露出比例
- 用 CSS 临摹复杂位图
- 把局部露出的装饰改成居中/放大
抠不干净 → 保留完整裁片并说明限制;禁止用“看起来差不多”的替代素材。
3.3 透明背景硬规则
transparent_required: true 的资源(默认:icons / illustrations / 不规则装饰):
- 必须有 alpha
- 不能带白底、灰底、页面底、卡片底矩形
- 先按完整外框 + 安全留白切,再抠底;禁止先抠再 trim
- 本地 floodfill 不干净时,可用 image2/imagegen 只去背景,禁止重生主体
- 必须在棋盘格 / 黑底 / 白底上验收
- 跑
scripts/audit_png_assets.py --require-transparent-bg
3.4 防裁切硬规则
- 宁可画布偏大留透明,也不能裁掉阴影/浅色底/抗锯齿边
- 非透明像素贴到四边 → 默认判定裁切失败,扩大 bbox 重出
- 服务宫格、底栏 icon 必须整件导出,不能只截符号局部
3.5 自适应硬规则
- 没有 375px 验证的交付视为未完成
- 禁止
min-width: 750、横向滚动、浏览器 zoom 冒充适配 - 禁止为了 375 去改子元素字号/间距/坐标
推荐结构:
<main class="fit-shell"> <div class="fit-box"> <section class="artboard">...</section> </div></main>:root { --board-w: 750; --board-h: 1624; /* 按源图比例计算 */ --fit-gutter: 0px; --board-scale: min(1, calc((100vw - var(--fit-gutter) * 2) / (var(--board-w) * 1px)));}.fit-box { width: calc(var(--board-w) * 1px * var(--board-scale)); height: calc(var(--board-h) * 1px * var(--board-scale)); overflow: hidden;}.artboard { position: relative; width: calc(var(--board-w) * 1px); height: calc(var(--board-h) * 1px); transform: scale(var(--board-scale)); transform-origin: top left;}3.6 Manifest 最小字段
{ "id": "card-wallet-illustration", "type": "bitmap", "source_bbox": { "x": 338, "y": 520, "width": 116, "height": 122 }, "scaled_bbox": { "x": 338, "y": 520, "width": 116, "height": 122 }, "z_index": 24, "asset": "assets/illustrations/card-wallet-illustration.png", "asset_pixel_width": 232, "asset_pixel_height": 244, "asset_scale_factor": 2, "css_display_width": 116, "css_display_height": 122, "transparent_required": true, "notes": "从当前源图裁切,保持原图露出比例"}关键等式:
asset_pixel_* = css_display_* × asset_scale_factor布局永远看 CSS 显示尺寸;文件可以是 2x/3x/4x。
04|仓库结构与安装
image-to-code/├── SKILL.md├── README.md├── LICENSE├── requirements.txt # Pillow + NumPy├── agents/openai.yaml├── references/│ ├── figma-editable-export.md│ └── slicing.md└── scripts/ ├── preview_bboxes.py ├── extract_png_asset.py ├── audit_png_assets.py └── compare_images.py安装到 Codex skills 目录:
# 克隆到 skills 目录(目录名建议 image-to-code)git clone https://github.com/yuzhworkhard-wq/image-to-code.git \ ~/.codex/skills/image-to-code
python3 -m pip install -r ~/.codex/skills/image-to-code/requirements.txt触发示例:
使用 $image-to-code 将当前选中的 UI 图片转换为自适应代码,并导出透明 PNG 切图资源。或自然语言:
把这张移动端设计图还原成 HTML/CSS,最终页面要自适应手机宽度,图标和插画请按 2x/3x 单独切成透明 PNG,后面还要能导入 Figma。常用脚本:
# bbox 预览scripts/preview_bboxes.py source.png layers.manifest.json qa/bbox-preview.png --only-type bitmap
# 高清透明切图scripts/extract_png_asset.py source.png assets/icons/icon-home-01.png \ --x 120 --y 88 --width 32 --height 32 \ --scale-factor 3 \ --css-width 32 --css-height 32 \ --remove-bg floodfill \ --manifest layers.manifest.json \ --id icon-home-01
# 透明/贴边/尺寸审计scripts/audit_png_assets.py assets/icons assets/illustrations assets/images \ --require-transparent-bg \ --manifest layers.manifest.json05|作者自述的局限性
主帖写得很清楚:
- 目前只做手机端;PC 端尺寸多、自适应更难,后续再做。
- Codex 会偷懒:透明背景、细节抠除不稳定,需要更硬的限制与脚本审计。
- 导出 Figma 略麻烦;作者有 web to figma 插件,需求多会再发(评论区催更最多)。
- 只适合单一界面固定高度复刻;长页被手机高度裁掉的下半截,当前做不出“继续下拉”的延伸效果。
- 当前 skill 主要面向 Codex(作者回复:Claude 无生图能力时,重绘/抠底会卡住)。
作者在评论里进一步澄清定位:
- 这更像 C 端活动页 / 飞机稿 的快速落地,不是 B 端组件库 / design system 的完整替代。
- B 端更需要
design.md、组件复用、产品与交互约束;那是另一条线。 - 有 Figma 源文件 + Dev Mode / MCP 时,未必需要这条 skill;这条 skill 解决的是 只有 PNG/JPG 效果图 时的还原。


(标注位是图片切图,其余多为代码实现)
06|评论区精华(77 帖压缩)
6.1 最常见的真实痛点
- Image2 出图很美,Codex 直接还原复杂页经常崩(尤其深色、大屏、高密度 UI)。
- Figma 官方 MCP 要 Dev 账号(约 $20/月),国内也有人转 MasterGo / 莫高,但积分不便宜。
- 商业插件如 Codia AI Design(Screenshot → Editable Figma) 被多次点名:复杂图、深色背景还原更稳,但收费。
- 大量催更:web to figma 插件、PC 端 skill、Claude 版。
6.2 作者对关键质疑的回应
| 质疑 | 作者回应要点 |
|---|---|
| 低分辨率原图强制放大是否糊? | 切完后会放大/重绘;Image2 产出像素本就有限。源图过低时应强制元素重绘。 |
| 这是不是只会做活动页、设计师还是螺丝钉? | 承认主场景是 C 端活动/酷炫飞机稿;B 端另需组件与 design 文档。skill 只流程化作者部分工作。 |
| 为什么不直接轻提示词? | 社区反馈显示轻提示词很难复刻 ToC 活动页;需要测量/manifest/审计闭环。 |
| Image2 商业可用性? | C 端以前很吃力;Image2 后“简单几句话就有不错界面”,卡点变成微调。skill + 插件正好接微调。 |
| Figma → 代码不是已经很好了吗? | 是的;前提是设计师图层/容器逻辑正确。图层乱套时,MCP 也救不了。 |
| 和 Figma 源文件路线比呢? | 有源文件 + MCP 时,这条 skill 不是必选项;它服务 只有效果图 的场景。 |
6.3 工作流共识(程序员视角)
评论区逐渐收敛出两条互补路径:
-
Image → Code(本 skill)
适合:活动页、单一手机界面、快速 HTML/CSS 落地、没有设计源文件。 -
Image → 可编辑 Figma →(MCP)→ Code
适合:后续还要改稿、深色复杂页、需要接近 100% 精确还原再进工程。
作者路线本质是:
Image2 出图 → image-to-code(测量 / 切图 / 750 锁定 / 自适应 QA) →(可选)web to figma / importer 进入 Figma 微调 → 需要工程化时再接组件与 design 文档6.4 其他值得记的点
- 有人问能否切 SVG、可改色 icon:合理增强方向,主帖未实现。
- 有人吐槽 Codex/Image2 难出真正透明图:skill 的价值之一就是程序化抠透明 + 审计,但复杂植物/花草类抠图仍难。
- 有科研开源软件作者表示要二开融合进自己的绘图工具链(帖 #67)。
07|你该不该用它
适合:
- 手里只有 Image2 / Midjourney / 截图等 位图效果图
- 目标是 移动端单页 高还原 HTML/CSS
- 需要 透明高清切图,而不是整页一张大图
- 想把“测量 → 切图 → 代码 → QA”固化成 Agent skill,而不是每次口头提醒
不太适合:
- 已有规范 Figma 源文件且能走官方 MCP / 设计稿转代码
- B 端后台、组件库、设计系统沉淀(需要 design token / 组件约束,不是单页像素合同)
- 超长滚动页、多状态交互原型、PC 多断点重排
- 期望 Claude 无图编辑能力时自动完成重绘抠底
08|可直接带走的最小操作清单
- 把仓库放到
~/.codex/skills/image-to-code - 安装
Pillow/NumPy - 在 Codex 中点名
$image-to-code,附上移动端 UI 图 - 要求交付物至少包含:
- 自适应页面代码
layers.manifest.jsonassets/高清透明 PNG- bbox 预览与 750 / 375 截图 QA
-(可选)
figma-code-import/本地 importer
- 用审计脚本卡住“假透明 / 贴边裁切 / 尺寸不对”
09|来源与版权
- 原帖:https://linux.do/t/topic/2314994
- 开源仓库:https://github.com/yuzhworkhard-wq/image-to-code(MIT)
- 作者:Donyzh
- 整理与配图镜像:本站「AI Agent Skills」分类转载分析;图片版权归原作者 / LINUX DO / 原图作者。
- 仓库 README 末尾致谢:学 AI,上 L 站!
如果你只想记三句话:
- 原图是视觉合同,不是灵感板。
- 先 manifest 与切图,再写代码;先 750 锁定,再整体缩放。
- 透明、防裁切、375 验收不过,就不算交付。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!





