Back to skills
extension
Category: Development & EngineeringNo API key required

图片拼接

图片拼接(merge)技能。把多张图按固定格式拼成一张,共 7 种点选格式:双图横排、三图横排(三联屏)、双图竖排、长图(竖排)、四宫格(2×2)、六宫格(3×2)、九宫格(3×3)。当用户说「拼图」「三联屏」「拼长图」「横向/纵向拼接」「拼九宫格」时触发。联排(横排/竖排/长图)要求图片尺寸一致,不一致会提醒;宫格(四/六/九)允许尺寸不一,图片间统一 1 毫米白色间隙、居中白底对齐。

personAuthor: neuhanlihubModelScope

image-merge — 图片拼接

用确定性脚本(Pillow)把多张图按固定拼接格式拼成一张。核心原则:只点选、不任意;顺序即语义、不覆盖、可校验

工作流程

  1. 判断拼接格式:用户说「三联屏/九宫格」等直接对应下表 preset;没说清就用 AskUserQuestion 列出 7 个固定选项让用户点选。
  2. 调用 scripts/merge.py --preset <预设>(环境准备见下)。
  3. 核对 JSON(最终尺寸、每张位置、间隙、是否有尺寸不一致提醒)。
  4. present_files 展示,汇报拼接格式与最终尺寸。

固定拼接格式(点选,共 7 种)

| 点选格式 | --preset | 布局 | 需要张数 | 尺寸要求 | |---|---|---|---|---| | 双图横排 | two_h | 左右并排 | 2 | 需一致 | | 三图横排(三联屏) | three_h | 左右并排 | 3 | 需一致 | | 双图竖排 | two_v | 上下堆叠 | 2 | 需一致 | | 长图(竖排) | long | 上下堆叠 | 任意 N 张 | 需一致 | | 四宫格 | four | 2×2 网格 | 4 | 可不一致 | | 六宫格 | six | 3×2 网格 | 6 | 可不一致 | | 九宫格 | nine | 3×3 网格 | 9 | 可不一致 |

  • 联排(two_h/three_h/two_v/long)要求图片尺寸一致:尺寸不一致时脚本会打印 [WARN] 提醒并在 JSON 的 notes 说明,同时仍按居中白底对齐产出结果,供你判断。
  • 宫格(four/six/nine)允许尺寸不一:图片尺寸不变,按「贴边对齐」放置——左半贴右、右半贴左、上半贴下、下半贴上(即每张图贴向中心十字线),中心格(九宫格第 5 格)平铺填满整格;图片之间用统一的 1 毫米白色间隙隔开。
  • 固定张数的格式(two_h/three_h/two_v/four/six/nine)需传入对应张数,多了少了脚本在 JSON 里提示;long 竖排不限张数。
  • 唯一可选参数 --gap-mm N:图片之间留 N 毫米白色间隙(默认 1.0mm,按固定 96 DPI ≈ 4px,--dpi 可覆盖)。

必须遵守

  • 顺序即语义:拼接顺序 = 命令行传入顺序(不是文件名排序)。
  • 永不覆盖:默认输出 原名_merge.png 新文件;输出路径永不等于任一输入路径。
  • 透明/EXIF/动图:EXIF 摆正、GIF 只取首帧并说明;带透明图拼到白底时在回复告知。
  • 大图内存:按 paste 逐张落位,避免无谓的全图 resize 放大。

环境准备(跨平台)

同 image-split(python3python/py -3 → 技能目录 .venv)。

脚本用法

$PY <本技能目录>/scripts/merge.py IMG1 IMG2 [IMG3 ...] \
  --preset two_h|three_h|two_v|long|four|six|nine [--gap-mm 1.0] [--dpi 96] [--output out.png]
  • 布局缺省 three_h(三联屏,最常见的多图横拼)
  • 每张图片在 JSON 里记录 {input, box:[x,y,w,h]};间隙换算记录为 gap_mm / gap_px / dpi

示例:

$PY .../scripts/merge.py a.png b.png c.png --preset three_h
# 3 images -> a_merge.png 1080x360 (preset=three_h, gap=4px)
# [{"output":".../a_merge.png","size":[1080,360],"gap_mm":1.0,"gap_px":4,"items":[...]}]

完成后的动作

  • present_files 展示拼接结果
  • 汇报:N 张 → 1 张、拼接格式、最终尺寸、间隙;联排尺寸不一致时须提醒用户