用 Midjourney 的 --tile 参数生成可以无限拼接的无缝图案,用 Python 脚本自动拼成 3×3 预览并计算接缝差异,最后整理成可用于包装纸、手机壳、布料打样的图案文件。
先看清成品
成品是一组以“江南春日”为主题的无缝图案(樱花、柳叶、燕子三种),每个图案配一张 3×3 拼接预览图和一份接缝检查结果。检查脚本已在本地用一张真无缝图和一张故意有接缝的渐变图测试:前者判定通过,后者被正确识别出上下接缝。
做完之后你会得到什么?
| 成果 | 说明 |
|---|---|
| 无缝图案 | 每种主题 1 张单元图 |
| 拼接预览 | 3×3 平铺图,肉眼检查是否有接缝 |
| 接缝分数 | 脚本计算左右、上下边缘差异 |
| 交付文件夹 | 单元图 + 预览图 + 使用说明 |
需要准备哪些环境?
| 项目 | 要求 | 说明 |
|---|---|---|
| Midjourney 订阅 | 任意付费档 | 网页端 midjourney.com 或官方 Discord |
| Python | 3.10 或更高 | 运行本文的后期处理脚本 |
| Pillow | pip install pillow |
图片裁剪、拼接、排版 |
| 中文字体 | 系统自带即可 | 脚本会自动寻找苹方、微软雅黑或 Noto CJK |
注意:Midjourney 服务条款禁止用自动化工具访问或生成内容,所以本文所有生成步骤都在网页或 Discord 里手动完成,脚本只处理已经下载到本地的图片。
第一步:怎样写出适合平铺的图案提示词?
1. 用 ChatGPT 规划系列
我要做一组“江南春日”主题的无缝平铺图案,用于包装纸和手机壳。
请设计 3 个图案,每个给出:
- 英文提示词(描述元素、排列密度、配色、画风,40 词以内,不要出现透视场景和地平线)
- 主色和辅色色值
- 适合的产品
2. 平铺图案的提示词要点
| 要点 | 原因 |
|---|---|
| 写“pattern”“scattered”“all-over” | 引导出均匀分布的图案,而不是一幅画 |
| 不要写场景和透视 | 有地平线的画面平铺后会断开 |
| 元素密度适中 | 太稀疏会露出明显网格感 |
加 --tile |
让画面四边可以首尾相接 |
3. 本文使用的提示词
scattered cherry blossoms and small swallows, all-over pattern, soft pink and celadon green on warm ivory background, traditional chinese ink and wash style, delicate --tile --ar 1:1
willow leaves and tiny peach blossoms, dense all-over pattern, fresh spring green and coral on cream background, flat illustration --tile --ar 1:1
注意:
--tile目前不能和 Edit 模型一起使用,做图案时不要在输入框里附加 Edit 参考图。
第二步:怎样检查图案是不是真的无缝?
只看单张图是看不出接缝的,必须拼起来看。
1. 项目结构
pattern-kit/
├── raw/
│ ├── sakura.png
│ ├── willow.png
│ └── swallow.png
├── tile_check.py
└── delivery/
2. 脚本 tile_check.py
"""检查 --tile 生成的图案是否真的无缝。
输出 3x3 拼接预览图,并计算左右、上下接缝处的像素差(越小越好)。
用法:python tile_check.py 图案.png [--repeat 3]
"""
import argparse
from pathlib import Path
from PIL import Image, ImageChops, ImageStat
def seam_score(img):
"""比较最左列与最右列、最上行与最下行的平均差异(0~255)。"""
w, h = img.size
left, right = img.crop((0, 0, 1, h)), img.crop((w - 1, 0, w, h))
top, bottom = img.crop((0, 0, w, 1)), img.crop((0, h - 1, w, h))
lr = sum(ImageStat.Stat(ImageChops.difference(left, right)).mean) / 3
tb = sum(ImageStat.Stat(ImageChops.difference(top, bottom)).mean) / 3
return lr, tb
def tiled(img, n):
w, h = img.size
out = Image.new("RGB", (w * n, h * n))
for i in range(n):
for j in range(n):
out.paste(img, (i * w, j * h))
return out
def main():
ap = argparse.ArgumentParser()
ap.add_argument("pattern")
ap.add_argument("--repeat", type=int, default=3)
a = ap.parse_args()
img = Image.open(a.pattern).convert("RGB")
lr, tb = seam_score(img)
out = Path(a.pattern).with_name(Path(a.pattern).stem + f"_tiled{a.repeat}x{a.repeat}.jpg")
t = tiled(img, a.repeat)
t.thumbnail((3000, 3000))
t.save(out, quality=90)
verdict = "通过" if max(lr, tb) < 12 else "可能有接缝,请放大预览图检查"
print(f"左右接缝差异 {lr:.1f},上下接缝差异 {tb:.1f}(0~255):{verdict}")
print(f"预览图:{out}")
if __name__ == "__main__":
main()
原理很简单:无缝图案的最左一列和最右一列在平铺时会挨在一起,所以它们的像素应该非常接近,上下同理。
3. 运行
pip install pillow
python tile_check.py raw/sakura.png
本文测试时的实际输出:
左右接缝差异 1.5,上下接缝差异 0.0(0~255):通过
预览图:raw/sakura_tiled3x3.jpg
用一张从上到下的渐变图做反例,脚本输出上下接缝差异 255.0,并提示可能有接缝。
4. 再用眼睛确认
打开 _tiled3x3.jpg 预览图,重点看四个问题:
| 检查项 | 不合格表现 |
|---|---|
| 接缝线 | 能看到横线或竖线 |
| 元素被切断 | 花朵在边缘处只剩半朵且对不上 |
| 网格感 | 同一个显眼元素整齐重复,像贴瓷砖 |
| 明暗不均 | 单元图一角偏亮,平铺后出现格子 |
注意:接缝分数只是辅助判断。分数低但有明显网格感的图,同样不适合做产品。
第三步:怎样整理成可交付的图案文件?
1. 需要更大的单元图
V8.1 和 V8.2 支持 --hd 直接生成 2048 像素的图。也可以对满意的图使用 Upscale。
放大后要重新跑一次 tile_check.py,确认放大没有破坏边缘。
2. 按产品准备尺寸
| 产品 | 做法 |
|---|---|
| 包装纸 | 用单元图在设计软件里平铺到印刷尺寸 |
| 手机壳 | 平铺后按壳型模板裁剪 |
| 布料打样 | 直接提交单元图,告诉工厂“四方连续” |
| 网页背景 | CSS background-repeat: repeat 直接平铺单元图 |
网页背景的写法:
body {
background-image: url("sakura.png");
background-repeat: repeat;
background-size: 400px 400px;
}
3. 交付文件夹
delivery/
├── sakura/
│ ├── sakura_unit.png # 单元图
│ ├── sakura_tiled3x3.jpg # 预览
│ └── README.txt # 主色色值、推荐平铺尺寸、生成日期
├── willow/
└── swallow/
出问题时该怎么调?
1. 预览里有明显接缝
确认提示词里有 --tile。如果有,说明画面里有大面积渐变或光影,换成更平面的画风,例如加 “flat illustration”。
2. 平铺后网格感很强
单元图里有一个特别显眼的大元素。提示词里加 “evenly scattered, varied sizes”,让元素大小不一、分布更均匀。
3. 想要两种元素比例可控
直接在提示词里写清主次,例如 “mostly cherry blossoms with a few small swallows”,比只罗列元素更容易控制比例。多试几次后,用 --seed 固定满意的结果方便微调。
4. 色彩印出来和屏幕不一样
AI 图是 RGB 色彩,印刷用 CMYK。交给印刷厂前先打样,必要时让设计师调色。
商用前要确认什么?
按 Midjourney 服务条款,你生成的图片归你所有,退订后仍然有效,但有几个例外:
| 情况 | 规则 |
|---|---|
| 公司或其员工,公司年收入超过 100 万美元 | 必须订阅 Pro 或 Mega 才拥有生成图片的权利 |
| 放大(Upscale)别人生成的图 | 图片仍归原作者 |
| 提示词里写了真实品牌、角色、名人 | 可能侵犯第三方权利,条款不会替你承担 |
注意:各国对 AI 生成内容能否获得版权保护的规定不同,用于商标、出版等重要场景前请咨询律师。
常见问题怎么处理?
| 现象 | 原因 | 解决方法 |
|---|---|---|
加了 --tile 仍有接缝 |
画面有透视或渐变 | 改为平面图案风格 |
--tile 和参考图冲突 |
Edit 模型不支持 tile | 去掉 Attach to prompt 里的参考图 |
| 出现地平线 | 提示词像在描述场景 | 删掉场景词,加 pattern |
| 脚本判通过但看着不舒服 | 网格感或明暗不均 | 以 3×3 预览的肉眼判断为准 |
| 预览图太大打不开 | 单元图分辨率高 | 脚本已限制预览最大 3000 像素 |
| 放大后边缘有色差 | 放大算法影响边缘 | 放大后重新检查,必要时换一张 |
项目资源
建议先只生成一张樱花图案,跑一次 tile_check.py,打开 3×3 预览图仔细看接缝和网格感。
确认流程走通后,再做完整的三件套,并把预览图发给印刷厂或客户确认。