图片改字 v2.0 — 无痕迹修改图片中的数字与文字
把图片里的一串数字/文字换成另一串,且看起来从未被改过。
铁律(每次执行前必读)
- 先说积分:生成图片会额外消耗积分(单张约 5-10 积分,迭代重试会累加)。动手前必须告知用户并说明预计张数。
- 不改原图文件:永远输出到新文件(默认
<原名>_edited.<ext>),原图只读。 - 合规一票否决:证件、票据、合同、公文、证书、银行流水、成绩单、医疗单据等具有法律效力的文件,一律拒绝。详见文末「合规边界」。
- 不撒谎:如果结果不达标,如实说明并给出备选方案(换个字、裁切构图、接受轻微痕迹),不要交付一张明显穿帮的图。
何时触发
- 用户要求修改图片中的数字、金额、日期、编号、姓名、标题、文案等
- 用户强调"要逼真"、"看不出 P 过"、"自然一点"
- 用户上传截图/照片并指出"把这里的 X 改成 Y"
- 用户说"P 图"、"改字"、"换个数字"
不适用于(此时应改用其他方案):整图风格迁移、换脸、去水印、大面积内容重绘、需要 100% 像素级精确的矢量排版(建议用 HTML/Canvas 重做)。
核心工具与参数(关键,别用错)
使用内置 ImageGen 工具的图生图编辑模式:传入 image1 = 原图,模型在原图基础上局部重绘。
| 参数 | 怎么用 | 为什么重要 |
|---|---|---|
image1 |
必填,原图的本地绝对路径或 HTTPS URL | 给了它才是"编辑",不给就是"凭空生成" |
input_fidelity |
"high" |
保真度开关。值越高结果越贴近原图。改字场景一律 high;若改动没生效再降一档重试 |
size |
必须匹配原图宽高比,从 1024x1024 / 1536x1024 / 1024x1536 里选最接近的 |
⚠️ 最大坑:方形尺寸套在长截图上会导致画面被拉伸/裁切,整图就废了。用 scripts/img_tool.py probe 自动给出建议值 |
quality |
"high" |
文字边缘清晰度直接取决于它 |
output_dir |
显式指定当前工作目录 | 否则图片散落到默认目录,找不着 |
image2 / image3 |
可选参考图:字体样本、同款风格图、想要的效果样例 | 当目标区域附近没有同字体字符可参照时,用参考图"喂"给模型 |
revise |
默认不传;若模型自由发挥、乱改非目标区域,试 false |
阻止模型改写你的精确指令 |
background |
编辑原图时不要设 transparent |
会破坏原图背景 |
> ⚠️ image1 只接受本地路径或 HTTP/HTTPS URL。base64、data URI、相对路径都不行。路径里有中文/空格时直接传绝对路径即可。
标准工作流(SOP)
Step 0 · 确认与报价
确认:改什么 → 改成什么 → 在哪儿。信息不全就问,别猜。
告知:本次大约需要生成 N 张图,约消耗 N×(5~10) 积分,可以开始吗?
若用户一次要改多处,明确说明会分步进行、费用按张累加。
Step 1 · 读图分析
用 Read 工具打开原图,逐项确认后在心里形成一段描述:
- 目标内容:原文是什么,在第几行/哪个位置,周围有什么
- 字体特征:衬线 / 无衬线 / 等宽 / 手写 / 黑体;字重(细/常规/粗);是否有描边、阴影、渐变、斜体
- 渲染环境:纸质印刷 / 屏幕截图 / 手机拍照 / 金属刻印 / 喷绘 / 黑板 / LED
- 一致性锚点:目标附近有没有相同字体的其他字符?有的话,在 prompt 里点名"参考图中其余数字的渲染风格"——这是提升成功率最有效的一招
- 干扰因素:光照方向、噪点/摩尔纹、透视角度、模糊程度、JPEG 压缩块
Step 2 · 预处理(小字/小目标必做)
python scripts/img_tool.py probe "<原图>" # 拿尺寸 + 建议 size 参数
- 目标文字在图中高度 < 40px,或整图分辨率很低 → 走「局部裁剪放大法」(见下方),不要直接整图硬改
- 目标文字高度 ≥ 40px 且背景干净 → 直接整图编辑即可
Step 3 · 构造 prompt
基础模板(按需裁剪,别堆砌):
在这张图片上做局部文字修改:把「<原文>」改成「<新文>」。
严格要求:
1. 只改这一处文字,画面其余部分必须与输入图逐像素一致,不允许任何重绘、移位或风格变化
2. 新文字的字体、字号、字重、字间距、基线位置、倾斜角度与原文完全一致
3. 若周围存在同字体的其他字符,严格复刻它们的笔画粗细、末端形状与渲染方式
4. 保持原有的颜色、透明度、发光/描边/投影、光照方向与噪点纹理
5. 边缘过渡自然,无模糊、无重影、无色差、无涂抹感
然后叠加场景加成词(这个是效果分水岭)→ 见 references/prompt-recipes.md,那里有印刷体/手写/屏幕/LCD/金属刻印/喷绘/黑板/布料等 10 类配方,以及中英文混排、竖排、艺术字等特殊处理。
新值书写规范:金额写 1,280.00(含千分位与小位);日期沿用原格式(如 2026/09/08 不要写成 2026-09-08);编号保持位数与分隔符。用户没说格式就按原格式推。
Step 4 · 生成
调用 ImageGen,参数:image1=原图(或裁剪放大图)、prompt、input_fidelity="high"、size=probe 建议值、quality="high"、output_dir=当前工作目录。
Step 5 · 自检(必做,不自检不交付)
用 Read 打开结果图,逐项过一遍 → references/self-check.md。
核心 6 项:字体像不像、基线齐不齐、颜色/光照对不对、周围有没有被连带改动、边缘有没有痕迹、语义对不对(有没有错别字/多字少字)。
任何一项不达标 → 进入 Step 6,不要将就。
Step 6 · 迭代(对症下药,别盲目重跑)
先判断失败症状,再选改法 → references/self-check.md 的「故障排查表」。
通用顺序:① 调 prompt 描述 ② 补参考图 image2 ③ 走局部裁剪放大法 ④ 换思路(见下)。
最多迭代 3 次;3 次仍不达标就停下来向用户说明,展示当前最好结果并给出备选方案。
Step 7 · 交付
用 present_files 展示,说明:改了什么、在哪儿、改成了什么、用了几张图、有无残留瑕疵。同时展示原图与结果图方便对比。
局部裁剪放大法(小字/小目标专用)
当目标文字在整图里太小,模型"看不清"导致字体跑偏时:
# 1. 裁剪目标区域并放大(--box 为原图像素坐标 x1,y1,x2,y2,可留较多边距)
python scripts/img_tool.py crop "<原图>" --box 620,340,880,410 --out _crop.png --scale 3
# 2. 用 ImageGen 编辑 _crop.png(此时 size 用与裁剪图比例匹配的尺寸)
# → 得到 _crop_edited.png
# 3. 羽化贴回原图(--box 必须与第 1 步完全一致,--feather 默认 2)
python scripts/img_tool.py paste "<原图>" "_crop_edited.png" --box 620,340,880,410 --out "<原名>_edited.png" --feather 3
要点:
- --box 两处必须完全一致,否则位置对不上
- 边距适度:四周留 10-30px(约半个字高)给羽化缓冲即可,不必贪大;裁剪框绝不能压到卡片边框、表格线、分隔线等边界元素,否则会把边界一起裁进来,贴回后产生错位和描边
- --scale 3-4 倍通常够;裁剪后长边建议控制在 2048 以内
- --feather 一般 2-4;如果贴回后有明显"补丁感",增大到 5-8;如果边缘糊了就减小
- 裁剪图编辑时,size 要按裁剪图的比例重新选,不是原图比例
多处修改策略
- 优先一次改完:若多处文字在同一行/同一视觉区域且互不影响,可在一次 prompt 里列出全部替换(编号 1. 2. 3.),省积分
- 否则分步串行:改完第 1 处 → 用结果图作为下一轮的
image1→ 逐步推进。每步都要自检,避免误差累积 - 分步时务必:每一轮把"已改好的部分"写进 prompt 的保持项,例如"已修改的 XX 保持不变,本次只改 YY"
- 超过 3 处建议先跟用户确认必要性与费用
常见坑位速查
| 现象 | 原因 | 解法 |
|---|---|---|
| 整图被拉伸变形 | size 与原图比例不符 |
用 probe 取建议值 |
| 整图被重绘、风格变了 | 没传 image1 或 input_fidelity 太低 |
补 image1,设 input_fidelity="high" |
| 找到图片 | 用了相对路径或 base64 | 传绝对路径 |
| 数字改了但字体不对 | 目标太小 / 缺少参照 | 裁剪放大法 + 点名参考周围同字体字符 |
| 背景被连带改掉 | prompt 没强调"其余不变" | 加强约束句,或裁剪放大法限制影响范围 |
| 生成结果与文字无关 | 指令被改写 | 试 revise: false,prompt 更简短明确 |
| 结果图角落出现"AI 生成"水印 | 生成服务自动添加 | 别用整图当结果。改走局部贴回法:从结果图 crop 出目标框,paste 回原图,水印自然被排除在外 |
| 贴回处出现一圈灰色描边环 | paste 羽化实现缺陷(v2.0.0) |
升级到 v2.0.1+,已修复 |
合规边界
拒绝执行(说明原因并提供合法替代建议):
- 伪造、变造身份证/护照/驾驶证/营业执照/学历证书/房产证等证件
- 篡改合同、发票、收据、银行流水、对账单、保单、票据、公文、法院文书
- 修改考试成绩单、录取通知、医疗诊断/检查报告、检疫证明
- 用于诈骗、冒充他人、虚假报销、逃票、伪造凭证等违法用途
- 伪造新闻截图、官方公告、他人聊天记录用于误导或诽谤
可以正常执行:设计稿/效果图的文案占位替换、演示配图的数据调整、自媒体配图创意修改、自己拍摄照片里的招牌/日期/价格修改(非交易凭证)、UI 原型的文案微调、教学/练习素材。
灰色地带处理:若无法判断用途,直接询问用途;用户回避或用途明显指向上述禁区 → 拒绝。
附:脚本
scripts/img_tool.py(需 Python + Pillow,pip install pillow;probe 在缺 Pillow 时仍可读文件头)
probe <图片>— 输出尺寸、宽高比、建议size参数crop <图片> --box x1,y1,x2,y2 --out out.png [--scale 3]— 裁剪并放大,作为编辑输入paste <原图> <局部图> --box x1,y1,x2,y2 --out out.png [--feather 3]— 缩放并羽化贴回
扩展阅读:references/prompt-recipes.md(场景配方)、references/self-check.md(自检 + 排查)。