Yueban Image vers Code

Flux de travail de conversion d'image en code avec découpe au pixel près en 750px. Utilisé pour convertir des captures d'écran ou maquettes en code et exporter des PNG transparents.

Spar Skills Guide Bot
DeveloppementAvancé
0023/07/2026
Codex
#image-to-code#ui-reproduction#pixel-perfect#design-to-code#slicing

Recommandé pour


name: yueban-image-to-code description: 像素级 750px 图片转代码与切图工作流。当 Codex 需要把当前选中的 UI 图片、截图、App/Web 设计稿、Figma 图片导出稿或设计长图转换为代码,并输出独立透明 PNG 切图资源时使用。适用于严格 1:1 等比例还原、画板宽度精确 750px、禁止自动排版优化、文本可编辑、简单图形原生矢量/代码化、图标和位图独立透明 PNG 提取,以及按矢量层、文本层、位图/图标切图三类模块独立验收的任务。

Yueban Image To Code

目标

把用户提供或当前选中的 UI 图片还原为代码,并导出必要的独立切图资源。

原图就是视觉合同。不要把它重新设计成“更合理”的界面,不要做排版优化,不要主观调整间距。必须先按 750px 宽度等比归一化,再按原图元素的位置、比例、层级、颜色、透明度和样式进行还原。

最高优先级规则

当用户要求“严格等比例缩放至画板宽度精确 750px”时,这条规则高于所有常规前端、设计和响应式建议。

  • 整体画板宽度必须精确为 750px
  • 画板高度必须根据原图宽高比自动计算,不能人为设定或优化。
  • 所有元素必须使用同一个全局缩放比例。
  • 保持所有元素的相对位置、相对大小、层级关系、堆叠顺序、颜色、透明度、阴影、渐变、圆角、描边和样式属性。
  • 禁止自动调整任何元素的位置、大小、对齐、间距、排版或视觉层级。
  • 禁止重新设计、优化布局、合并独立元素、拉伸素材、改变颜色或简化效果。
  • 禁止把图标或位图强行转换为矢量路径。
  • 禁止使用相似图标库、相似插画、AI 生成图、CSS 临摹图或占位素材替代原图中的图标/位图。
  • 禁止自动创建 Figma/export 的 Slice 对象。只有在需要切图资源时,才按元素边界导出独立 PNG 文件。
  • 如果代码优雅性和视觉还原发生冲突,视觉还原优先。

跨目录调用一致性

无论用户在哪个项目文件夹调用本 skill,都必须只以本次用户提供/选中的原图为视觉源。不要沿用其他会话、其他文件夹、旧示例或历史任务里的结构、素材、配色、页面区域和实现假设。

  • 每次调用都必须重新读取当前源图尺寸。
  • 每次调用都必须重新测量当前源图元素坐标。
  • 每次调用都必须重新建立当前源图的图层分类表。
  • 不得复用旧项目里的图标、插画、头像、卡片素材或布局参数,除非用户明确指定这些就是源素材。
  • 不得因为当前项目已有组件或 CSS,就把原图自动改造成项目现有组件样式。
  • 如果没有源图局部切图能力,宁可保留完整局部裁片作为临时素材并说明限制,也不要用“看起来差不多”的替代图重画。

执行流程

  1. 检查输入图片和项目约束。
  2. 把原图等比归一化到 750px 宽度。
  3. 建立 layers.manifest.json:记录每个图层的原图 bbox、缩放后 bbox、类型、z-index、导出文件名。
  4. 先按 manifest 导出切图资源,再写代码。禁止先凭感觉写代码再补切图。
  5. 在 750px 画板中使用 manifest 的精确坐标实现代码。
  6. 分模块校验:矢量、文本、位图/图标切图分别验收。
  7. 做整页 750px 叠图复核。
  8. 根据具体错位、缺图、裁切、样式差异继续迭代。
  9. 交付代码、切图资源、manifest 和简短还原报告。

输入检查

开始前先确认:

  • 原图尺寸和宽高比
  • 目标类型:网页、移动端界面、组件、海报、邮件、游戏 UI 或静态 HTML
  • 是否已有项目框架和技术栈
  • 是否要求只输出代码、只输出切图,还是代码加切图
  • 哪些文字必须变成可编辑文本
  • 哪些复杂图形需要保留为透明 PNG

如果仓库已有框架,遵循现有框架。没有项目时,静态页面优先使用 HTML/CSS/JS;只有在组件结构或交互确实需要时才使用 React/Vite。

750px 等比归一化

假设原图尺寸为 source_width x source_height

scale = 750 / source_width
final_width = 750
final_height = round(source_height * scale)
scaled_x = original_x * scale
scaled_y = original_y * scale
scaled_width = original_width * scale
scaled_height = original_height * scale

同一个 scale 必须应用到:

  • 所有坐标
  • 所有宽高
  • 所有圆角
  • 所有描边
  • 所有阴影偏移和模糊
  • 所有渐变位置
  • 所有图标和位图外框
  • 所有文字字号、行高和字间距

主交付物是锁定的 750px 定稿画板。不要让响应式规则影响 750px 版本。如果用户还需要响应式版本,必须在 750px 还原完成后再单独适配。

强制 Manifest

任何图片转代码 + 切图任务都必须先创建 manifest。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",
  "transparent_required": true,
  "notes": "从当前源图裁切,保持原图露出比例"
}

规则:

  • source_bbox 必须来自当前源图测量,不得凭布局推算。
  • scaled_bbox 必须由同一个 scale 计算得到。
  • 代码中的每个图片层、文本层、矢量层都必须能追溯到 manifest。
  • 如果实现截图和原图不一致,先修 manifest 坐标,再修代码。
  • 没有 manifest 的交付视为未完成。

Bbox 测量和预览

切图区域不能凭感觉。每个需要导出的资源必须先完成 bbox 预览校验,再导出 PNG。

流程:

  1. 在原图原始尺寸上测量 source_bbox,不要在浏览器缩放预览图上估算。
  2. bbox 必须覆盖完整元素外框,包括透明留白、浅色底形、阴影、半透明边缘和被遮挡但可见的外缘。
  3. 对边界不确定的资源,建立 2-3 个候选 bbox,选择能完整覆盖且不多带相邻元素的最大安全框。
  4. 使用 scripts/preview_bboxes.py 或等效方式,把 manifest 中的 bbox 画到源图上生成预览图。
  5. 只有当预览框与原图元素完整外框对齐后,才允许切图。
  6. 如果预览框框到了相邻文字、相邻图标、卡片背景大块区域,必须修 bbox。
  7. 如果导出后发现缺失、贴边、白底、灰底,必须回到 bbox 预览步骤重测,不能只在 PNG 上修补。

交付报告必须包含 bbox 预览图路径或说明已做等效原图框选复核。

图层分类规则

实现前必须把每个可见元素归类:

  • 文本图层:全部还原为可编辑文本或代码文本。匹配文字内容、字体、字号、字重、行高、字间距、颜色、透明度、对齐方式、换行和精确坐标。
  • 简单矢量/规则图形:矩形、圆形、线条、边框、按钮背景、分割线、简单渐变和简单阴影,转为 CSS/Figma 原生形状或代码。
  • 位图/图标切图:按钮图标、导航图标、功能图标、状态图标、头像、产品图、卡片插画、装饰图、背景素材、不规则复杂图形,全部从当前源图中提取为独立透明 PNG。不得用相似图标、相似插画、CSS 临摹、emoji、字体图标或生成图替代。
  • 复杂图表/可视化:复杂图形整体保留为透明 PNG 图层;图表中的可读文字单独提取为可编辑文本,覆盖在对应位置。

每个独立图标和位图都必须保持独立图层和独立文件。不得合并、编组导出或做成 sprite,除非用户明确要求。

视觉规格提取

编码前先为自己写一份简短视觉提取记录:

  • 画板尺寸、缩放比例和最终高度
  • 页面网格、主要区域、对齐边缘和层级顺序
  • 外边距、模块间距、卡片内边距和重复节奏
  • 字体、字号、字重、行高、字间距、大小写
  • 背景色、文字色、边框色、强调色、阴影色、渐变色
  • 图片、图标、插画和背景素材的裁切方式
  • 阴影、模糊、透明度、混合模式、圆角和描边

尽量使用测量工具、截图、图像采样和浏览器计算样式,不要只靠目测。无法获得原字体时,选择最接近的可用字体,并通过字号、字重、行高和间距微调到视觉一致。

布局锁定规则

布局不允许使用自动流式排版来“复刻大概结构”。必须用 750px 画板坐标系锁定。

  • 根画板必须是 width: 750px,高度等于归一化高度。
  • 画板内所有关键层必须使用 manifest 坐标定位。
  • 页面预览时可以整体缩放画板,但不能对子元素重新排版。
  • 禁止使用 flex/grid 的自动分布结果替代原图坐标;flex/grid 只能在数值完全等于 manifest 坐标时作为实现手段。
  • 顶部头像区、数据区、会员条、四宫格卡片、更多服务、底部导航必须分别和原图同 x/y/width/height。
  • 如果截图里出现内容整体上移、下移、卡片变宽、间距变大、头像被裁、底部导航位置变化,直接判定布局失败。

切图计划

不要把整张设计稿切成一张大图,除非用户明确要求静态位图。文字、按钮、卡片、边框、分割线等应尽量用代码实现。但复杂插画、头像和图标必须从当前源图裁切,不能重绘。

必须导出独立透明 PNG 的内容:

  • 所有图标
  • 头像、logo、状态栏图标、底部导航图标
  • 产品图、截图、照片
  • 卡片内的钱包、礼物、徽章、星星、勾选章、装饰块等复杂插画和不规则装饰图
  • 复杂图表、数据可视化和手绘元素
  • 纹理、遮罩、复杂阴影或无法稳定用 CSS 复现的图形
  • 无法从现有图标库准确还原的 logo 或品牌标识

不要为这些内容导出切图:

  • 普通文字
  • 简单按钮、卡片、边框、分割线、标签、输入框
  • 简单 CSS 渐变、阴影、圆角矩形或网格背景
  • 只有在与原图形状、比例、线宽、端点、圆角和视觉重量完全一致时,才允许用项目现有图标系统复现;否则必须从原图提取 PNG。

涉及切图时必须阅读 references/slicing.md,按其中的命名、格式、透明背景和禁止裁边规则执行。

优先使用或等效执行 scripts/extract_png_asset.py 从源图按 bbox 导出 PNG。该脚本不会自动 trim,输出画布固定等于 bbox,可选择移除纯色背景并保留 alpha。

导出前必须先用 scripts/preview_bboxes.py 检查 bbox 区域。没有 bbox 预览校验的切图结果不可信。

禁止近似重绘

下列行为全部视为失败,即使页面看起来“更规整”或“更清晰”:

  • 把原图的小图标换成 lucide、Material Icons、SF Symbols 或其他相似图标。
  • 把原图卡片里的钱包、礼盒、徽章、星星、人物头像、状态栏图标重新画成另一套风格。
  • 把原图中靠左/靠右/局部露出的插画改成居中、放大、缩小或重新裁切。
  • 把四宫格、服务宫格、会员条、底部导航重新排版成更均匀的布局。
  • 为了适配代码组件,把原图卡片高度、圆角、间距、文字位置、图片比例改掉。
  • 把原图的小装饰图放大成主视觉,或把原图的大图缩小成装饰。
  • 用渐变、阴影或 CSS 图形模拟复杂位图,导致形状和原图不一致。

如果无法精准矢量化或代码化某个复杂元素,必须把该元素从源图按完整外框提取为 PNG,而不是近似重绘。

透明背景硬规则

凡是 manifest 中 transparent_required: true 的资源,最终 PNG 必须有 alpha 通道,并且目标背景必须透明。

  • PNG 不能带白底、灰底、页面底色或卡片底色,除非该底色是元素本身的一部分。
  • 从截图裁切出的白/灰/纯色背景必须抠除,但画布尺寸不能改变。
  • 切图 bbox 必须先覆盖完整元素并额外外扩安全留白,再做背景抠除;不得先抠除再按主体重新裁边。
  • 抠除背景后不得 trim,不得重新计算 bbox,不得让主体贴边。
  • 交付前必须在棋盘格、黑底、白底上检查透明边缘。
  • 如果无法可靠抠除背景,必须说明并保留完整局部裁片作为临时失败态,不能谎称透明切图完成。

防裁切硬规则

切图宁可画布偏大并保留透明留白,也绝不能裁掉任何一段内容。任何“只截到一段”“边缘缺一块”“阴影/浅色底被削掉”“图标贴边”的结果都判定为失败。

  • 切图边界必须来自原图中该元素的完整视觉外框,而不是来自抠图后的深色主体外框。
  • 图标包含浅色圆形/八边形底、阴影、光晕、渐变底时,底形属于完整视觉范围,不能被忽略。
  • 如果图标主体和浅色底需要拆层,浅色底必须用代码/矢量单独复现,图标 PNG 仍必须保留完整主体和必要透明留白。
  • 如果无法稳定判断真实边界,必须向四周扩展安全留白,默认至少 4px-12px,而不是缩小裁切框。
  • 导出的 PNG 中,任何非透明像素触碰画布四边都必须判定为疑似裁切,必须扩大画布重出。
  • 有阴影、模糊、发光、抗锯齿边缘的资源,必须保留完整半透明像素,不能只保留不透明主体。
  • 服务宫格、底部导航、功能入口这类图标,必须逐个图标整件导出,不能从图标中间截取局部,也不能只截一个角、一条边或一个内部符号。
  • 切图尺寸校验不只看视觉是否像,还必须检查 PNG 画布宽高是否覆盖原元素完整外框。

代码实现规则

  • 首先匹配原图,不做主观优化。
  • 在 750px 画板中优先使用精确像素坐标和固定尺寸。
  • 可以使用绝对定位实现锁定画板,只要更有利于还原。
  • 使用 CSS 变量保存提取出的颜色、圆角、间距、字体和阴影 token。
  • 保留真实内容层级,不要用说明文字或占位文案替代原内容。
  • 不要增加原图不存在的外层卡片、装饰容器或嵌套结构。
  • 字间距默认按原图提取;原图没有明显 tracking 时保持 0
  • 不要用视口宽度直接缩放字体。
  • 响应式适配是第二阶段任务,不能改变 750px 定稿。

验收与复核

只要能渲染浏览器页面,就必须截图验证:

  1. 启动本地页面或开发服务器。
  2. 截取 750px 画板截图。
  3. 与 750px 归一化原图进行叠图对比。
  4. 分别校验矢量图层、文本图层、位图/图标切图模块。
  5. 先修正最大差异:画板尺寸、层级顺序、坐标、宽高、背景、字体大小,再修细节效果。
  6. 重复截图和对比,直到剩余差异都有明确原因。

必须保留一个 QA 对照方式:可以是半透明底图 overlay、单独对比截图、或差异图。最终生产层不能依赖整页底图,但开发验收必须能证明实现层和源图对齐。

可以使用 scripts/compare_images.py 做快速图片差异指标检查。像素指标只是辅助判断;字体抗锯齿、系统字体替换和浏览器渲染差异可能导致可接受的少量差异。

切图资源交付前必须运行或等效执行 scripts/audit_png_assets.py --require-transparent-bg:检查 PNG 四边是否有非透明像素贴边、是否包含 alpha 透明通道、角落背景是否透明,并在有 manifest 时校验每张 PNG 的宽高。任何 touches_edgetransparent_bg_ok=false 或宽高不一致都必须先修复。

还必须检查透明度:透明 PNG 如果 has_alpha_channel=false、背景区域 alpha 不为 0、或在棋盘格上出现白/灰色矩形底,判定失败。

验收标准

  • 整体画板宽度必须精确为 750px
  • 矢量形状的坐标、宽高、圆角、描边、渐变、颜色和透明度必须对齐 750px 原图,主观允许误差为 0px
  • 文本内容、坐标、字号、字重、行高、字间距、颜色、对齐方式和换行必须对齐原图。
  • 每个图标/位图 PNG 的画布尺寸必须等于对应元素外框,宽度和高度分别校验。
  • 位图/图标必须保留完整透明留白和边缘像素,禁止自动裁边、智能缩边、内容自适应裁剪。
  • 位图/图标 PNG 中如有非透明像素贴到画布边缘,默认视为裁切失败,必须扩大边界重出图,除非原图元素本身明确被父容器裁切。
  • 任一图标、头像、插画、状态栏、导航图标不是来自当前源图,且与原图形状/比例/风格不完全一致,判定失败。
  • 任一卡片插画的位置、大小、露出区域、裁切方式与原图不一致,判定失败。
  • 任一模块因为自动排版导致整体坐标、间距、宽高和原图不一致,判定失败。
  • 最终页面由切图、矢量和文本拼装后,必须与 750px 原图全覆盖复核,无缺图、无裁切、无错位、无层级错误。

交付说明

完成后只需要简短说明:

  • 修改或新增的代码文件
  • 切图资源目录
  • 750px 画板尺寸
  • layers.manifest.json
  • bbox 预览图或等效框选复核说明
  • 做过哪些截图和模块校验
  • audit_png_assets.py 或等效 PNG 边缘/尺寸审计结果
  • 已知限制,例如缺少原字体、源图像素不足、部分元素被遮挡

不要写冗长解释。真正的交付证明是代码、切图资源和复核截图。

Skills similaires