设计实践

Midjourney 品牌视觉实战:统一风格并批量适配社媒尺寸

用 Midjourney 的风格参考(--sref)为一家虚构的精品咖啡店“山野咖啡”做出一整套风格统一的品牌视觉图,再用一个 Python 脚本把原图一键裁成小红书、公众号、朋友圈、竖屏海报四种尺寸并加上品牌角标

BINBHO · 图文教程

用 Midjourney 的风格参考(--sref)为一家虚构的精品咖啡店“山野咖啡”做出一整套风格统一的品牌视觉图,再用一个 Python 脚本把原图一键裁成小红书、公众号、朋友圈、竖屏海报四种尺寸并加上品牌角标。

先看清成品

成品是一个文件夹:6 张同一风格的主视觉原图(店铺环境、招牌饮品、咖啡豆、手冲过程、甜点、季节限定),以及脚本自动输出的 24 张各平台成品图。核心技巧是先“锁定风格”,再批量换主体。文中脚本已在本地用测试图片实际运行通过。

做完之后你会得到什么?

成果 数量 用途
风格样板 1 个 sref 代码或参考图 之后所有图都用它保持统一
主视觉原图 6 张 门店物料、官网、菜单
平台成品图 24 张 小红书 3:4、公众号头图、方图、9:16 竖屏
提示词库 1 份文本 以后上新品时直接替换主体

需要准备哪些环境?

项目 要求 说明
Midjourney 订阅 任意付费档 网页端 midjourney.com 或官方 Discord
Python 3.10 或更高 运行本文的后期处理脚本
Pillow pip install pillow 图片裁剪、拼接、排版
中文字体 系统自带即可 脚本会自动寻找苹方、微软雅黑或 Noto CJK

当前默认模型是 V8.2,本文所有提示词按 V8.2 编写。

注意:Midjourney 服务条款禁止用自动化工具访问或生成内容,所以本文所有生成步骤都在网页或 Discord 里手动完成,脚本只处理已经下载到本地的图片。

第一步:怎样先把“品牌风格”定下来?

很多人直接写“一杯拿铁”开始生成,结果每张图风格都不一样。正确顺序是先定风格,再换内容。

1. 用 ChatGPT 写风格描述

我在做一家精品咖啡店的品牌视觉,店名“山野咖啡”,定位是山里的安静咖啡馆,客群 25-35 岁。
请给我 3 套不同方向的视觉风格,每套包含:
- 一句英文风格描述(用于 AI 绘图,40 词以内)
- 主色和辅色(给出色值)
- 光线、材质、构图关键词
- 适合与不适合的画面元素

2. 生成风格探索图

挑一套风格描述,在 Midjourney 里生成。下面是本文使用的提示词:

quiet mountain cafe interior at early morning, warm wood and linen, soft window light, muted earthy palette of sage green and oat beige, film photography, shallow depth of field, calm minimal composition --ar 3:4 --s 150
参数 作用
--ar 3:4 竖图比例,方便之后裁小红书图
--s 150 风格化程度,数值越高越“艺术化”,越低越贴近字面

3. 选出风格样板

多跑几轮,挑一张最能代表品牌的图。这张图就是“风格样板”。

有两种方式锁定它:

方式 做法 适合
图片风格参考 把这张图作为 Style Reference 拖进输入框(Discord 里用 --sref 图片网址) 风格来自自己的图
sref 代码 使用一个数字形式的 --sref 代码 想复用某个现成风格

4. 检查结果

用同一个 sref 换一个完全不同的主体,比如“一袋咖啡豆”。如果色调、光线、颗粒感和样板一致,说明风格已经锁定。

第二步:怎样批量生成同一风格的 6 张主视觉?

1. 准备提示词模板

模板 = 主体描述 + 固定风格尾巴。主体每次换,尾巴不变:

[主体], muted earthy palette of sage green and oat beige, soft window light, film photography, calm minimal composition --sref [你的风格样板] --ar 3:4 --s 150

2. 依次替换主体

编号 主体
01 a handcrafted latte with leaf latte art on a wooden table
02 barista pouring hot water into a pour-over dripper, close-up of hands
03 roasted coffee beans spilling from a linen bag
04 a slice of fig cake and a small cup of espresso
05 cafe counter with ceramic cups and a small potted plant
06 iced coffee with osmanthus flowers, autumn seasonal special

3. 调整风格强度

如果新图被样板“带偏”(比如样板是室内,咖啡豆图也冒出窗户),用 --sw 降低风格参考权重;反过来风格不够像就调高。

注意:画面里的文字和 Logo 不要依赖 AI 生成,容易出错字。店名统一用后面的脚本或设计软件加。

4. 下载原图并命名

下载到 raw/ 目录,按编号命名,方便追溯:

brand-kit/
├── prompts.txt          # 所有提示词和 sref,一行一张
├── raw/
│   ├── 01-latte.png
│   ├── 02-pourover.png
│   ├── 03-beans.png
│   ├── 04-cake.png
│   ├── 05-counter.png
│   └── 06-seasonal.png
├── social_sizes.py
└── out/                  # 脚本输出

需要大图时,V8.1 和 V8.2 支持 --hd 直接生成 2048 像素的高清图,比标准图消耗更多 GPU 时间;HD 模式的最大画幅比例是 4:1。

第三步:怎样一键裁出各平台尺寸?

1. 安装依赖

python3 -m venv .venv && source .venv/bin/activate
pip install pillow

2. 脚本 social_sizes.py

"""把 Midjourney 原图批量裁成各平台尺寸,并加上品牌文字角标。
用法:python social_sizes.py 原图目录 输出目录 --text "山野咖啡" [--font 字体文件]
"""
import argparse
from pathlib import Path

from PIL import Image, ImageDraw, ImageFont, ImageOps

SIZES = {
    "xhs_3x4": (1080, 1440),      # 小红书竖图
    "wechat_cover": (900, 383),   # 公众号头图(约 2.35:1)
    "square": (1080, 1080),       # 朋友圈 / 通用方图
    "story_9x16": (1080, 1920),   # 竖屏海报
}


def load_font(path, size):
    if path:
        return ImageFont.truetype(path, size)
    for cand in ("/System/Library/Fonts/PingFang.ttc", "C:/Windows/Fonts/msyh.ttc",
                 "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"):
        if Path(cand).exists():
            return ImageFont.truetype(cand, size)
    return ImageFont.load_default(size)


def badge(img, text, font_path):
    if not text:
        return img
    d = ImageDraw.Draw(img, "RGBA")
    size = max(24, img.width // 22)
    font = load_font(font_path, size)
    pad = size // 2
    box = d.textbbox((0, 0), text, font=font)
    w, h = box[2] - box[0], box[3] - box[1]
    x, y = img.width - w - pad * 3, img.height - h - pad * 3
    d.rounded_rectangle((x - pad, y - pad, x + w + pad, y + h + pad * 1.4), radius=pad, fill=(0, 0, 0, 120))
    d.text((x, y - box[1] // 2), text, font=font, fill=(255, 255, 255, 235))
    return img


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("src")
    ap.add_argument("out")
    ap.add_argument("--text", default="")
    ap.add_argument("--font")
    a = ap.parse_args()
    out = Path(a.out)
    out.mkdir(parents=True, exist_ok=True)
    files = [p for p in sorted(Path(a.src).iterdir()) if p.suffix.lower() in {".png", ".jpg", ".jpeg", ".webp"}]
    for p in files:
        im = ImageOps.exif_transpose(Image.open(p)).convert("RGB")
        for name, size in SIZES.items():
            # ImageOps.fit 居中裁剪到目标比例,不会拉伸变形
            fitted = ImageOps.fit(im, size, method=Image.LANCZOS, centering=(0.5, 0.45))
            badge(fitted, a.text, a.font).save(out / f"{p.stem}_{name}.jpg", quality=90, optimize=True)
    print(f"处理 {len(files)} 张原图,输出 {len(files) * len(SIZES)} 张到 {out}")


if __name__ == "__main__":
    main()

ImageOps.fit 先按目标比例居中裁剪再缩放,不会把图片拉伸变形。centering 的第二个值 0.45 让裁剪略偏上,人像和饮品顶部不容易被切掉。

3. 运行

python social_sizes.py raw out --text "山野咖啡"

期望输出:

处理 6 张原图,输出 24 张到 out

4. 检查结果

检查项 通过标准
数量 out/ 里有 24 张 jpg
比例 打开 01-latte_wechat_cover.jpg,是细长横图
主体 各尺寸里饮品主体没有被切掉
角标 右下角有半透明底的“山野咖啡”
中文 角标不是方框乱码

出问题时该怎么调?

1. 6 张图风格还是不统一

先确认每条提示词都带了同一个 --sref。其次把风格尾巴原样复制,不要每次手打改词。

如果还是不统一,可以把 2 到 3 张满意的图同时作为风格参考,比单张更稳定。

2. 杯子、手指等细节变形

在提示词里把主体写得更具体,例如“a white ceramic cup with a handle on the right”。

局部问题不必重画整张,用网页端 Editor 选中出错区域,配合 Edit 模型用文字说明怎么改。

3. 脚本加的角标是方框

说明没找到中文字体。用 --font 指定字体文件:

python social_sizes.py raw out --text "山野咖啡" --font "C:/Windows/Fonts/msyh.ttc"

4. 裁剪后主体被切掉

主体偏一侧的图,把 centering 改成 (0.3, 0.45)(偏左)或 (0.7, 0.45)(偏右),也可以生成时就把画幅比例设成和用途一致。

商用前要确认什么?

按 Midjourney 服务条款,你生成的图片归你所有,退订后仍然有效,但有几个例外:

情况 规则
公司或其员工,公司年收入超过 100 万美元 必须订阅 Pro 或 Mega 才拥有生成图片的权利
放大(Upscale)别人生成的图 图片仍归原作者
提示词里写了真实品牌、角色、名人 可能侵犯第三方权利,条款不会替你承担

注意:各国对 AI 生成内容能否获得版权保护的规定不同,用于商标、出版等重要场景前请咨询律师。

常见问题怎么处理?

现象 原因 解决方法
参数不生效 参数前没空格,或用了逗号 参数放最后,前面留空格,参数间不加标点
sref 图片网址无效 Discord 里图片必须是在线地址 先把图片发到 Discord 再复制链接,或改用网页端拖拽
风格太“艺术化” --s 偏高 调低到 50 到 100,或加 --raw
画面出现错字 AI 生成文字不可靠 文字后期添加
图片被别人看到 默认公开到画廊 Pro 和 Mega 套餐可用 Stealth 模式
No module named PIL 没装 Pillow pip install pillow
输出图偏糊 原图是标准尺寸却裁成大图 用 --hd 或 Upscale 后再裁

项目资源

用途 地址
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 模型 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
套餐对比 https://docs.midjourney.com/hc/en-us/articles/27870484040333-Comparing-Midjourney-Plans
Pillow ImageOps https://pillow.readthedocs.io/en/stable/reference/ImageOps.html

建议先只做风格锁定这一步:生成一张样板,再用同一个 sref 换 3 个完全不同的主体,看风格是否稳定。

风格稳定后再批量出图。脚本部分可以先拿手机里任意几张照片测试,确认裁剪位置和角标效果满意。