设计实践

Midjourney 无缝图案制作:Tile 拼接与接缝质量检测

用 Midjourney 的 --tile 参数生成可以无限拼接的无缝图案,用 Python 脚本自动拼成 3×3 预览并计算接缝差异,最后整理成可用于包装纸、手机壳、布料打样的图案文件。

BINBHO · 图文教程

用 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 像素
放大后边缘有色差 放大算法影响边缘 放大后重新检查,必要时换一张

项目资源

用途 地址
Midjourney 官网 https://www.midjourney.com
参数列表 https://docs.midjourney.com/hc/en-us/articles/32859204029709-Parameter-List
版本说明 https://docs.midjourney.com/hc/en-us/articles/32199405667853-Version
Edit 模型(含 tile 限制) https://docs.midjourney.com/hc/en-us/articles/48495453462797-Edit-Model
商用说明 https://docs.midjourney.com/hc/en-us/articles/27870375276557-Using-Images-Videos-Commercially
服务条款 https://docs.midjourney.com/hc/en-us/articles/32083055291277-Terms-of-Service
CSS background-repeat https://developer.mozilla.org/zh-CN/docs/Web/CSS/background-repeat
Pillow ImageChops https://pillow.readthedocs.io/en/stable/reference/ImageChops.html

建议先只生成一张樱花图案,跑一次 tile_check.py,打开 3×3 预览图仔细看接缝和网格感。

确认流程走通后,再做完整的三件套,并把预览图发给印刷厂或客户确认。