下载 App

嗒啦啦生图参考图超限了?拼图脚本一分钟搞定

05/2693 浏览开发交流
作者:浠涫
这篇攻略解决什么问题
用 AI 做游戏风格探索的时候(比如:我想测试"像素 RPG 风格"放到我的游戏里是什么感觉),通常的流程是:
  1. 收集一批参考截图(各种风格的游戏截图、UI 素材)
  2. 把截图传给嗒啦啦的 GPT image2,配上 prompt,让它帮你生成一批"换皮版本"
  3. 反复迭代,直到风格基本稳定
但很快你会遇到一个硬墙:gpt image2似乎只能带六张参考图
截图一多,要么超限传不进去,要么 AI 的"注意力"被稀释掉,生成效果乱跑。
核心思路:拼图降维,把多张压成少张提前把截图拼成"板块全景图",让原本占 8 个参考图槽的素材只占 1 个槽,腾出来的空间放风格锚点图和其他补充参考。
本质是:在 AI 有限的感知窗口里,最大化有效信息密度。
一张精心组织过的全景图,比十二张散图让 AI 理解得更准确。
用 Python 脚本拼图(附完整代码)下面是一个 2×N 网格拼图脚本,支持中文标注。直接复制就能用:
from PIL import Image, ImageDraw, ImageFont
import os
def compose_grid(image_paths, labels, output_path,
                 cols=2, cell_w=600, cell_h=400, label_h=40,
                 font_path="/home/Maker/misans_merged.ttf", font_size=26):
    """
    把多张图拼成 cols 列的网格,每张图底部附中文标注。
    image_paths : 图片路径列表
    labels      : 每张图的中文标注(与 image_paths 一一对应)
    output_path : 输出文件路径
    cols        : 列数(默认 2 列)
    cell_w/h    : 每个格子的宽高(像素)
    label_h     : 底部标注区高度
    font_path   : 中文字体路径(见下方"踩坑:中文变方框")
    """
    rows = (len(image_paths) + cols - 1) // cols
    canvas = Image.new("RGB", (cols * cell_w, rows * (cell_h + label_h)), (240, 240, 240))
    draw = ImageDraw.Draw(canvas)
    try:
        font = ImageFont.truetype(font_path, font_size)
    except Exception:
        print(f"[警告] 字体加载失败: {font_path},中文会变方框")
        font = ImageFont.load_default()
    for i, (img_path, label) in enumerate(zip(image_paths, labels)):
        row, col = divmod(i, cols)
        x = col * cell_w
        y = row * (cell_h + label_h)
        # 缩放图片填满格子
        img = Image.open(img_path).convert("RGB")
        img.thumbnail((cell_w, cell_h), Image.LANCZOS)
        canvas.paste(img, (x + (cell_w - img.width) // 2,
                           y + (cell_h - img.height) // 2))
        # 底部标注
        label_y = y + cell_h
        draw.rectangle([x, label_y, x + cell_w, label_y + label_h], fill=(30, 30, 30))
        bbox = draw.textbbox((0, 0), label, font=font)
        text_w = bbox[2] - bbox[0]
        draw.text((x + (cell_w - text_w) // 2, label_y + 8),
                  label, font=font, fill=(255, 255, 255))
    canvas.save(output_path, quality=90)
    print(f"已保存: {output_path}  ({canvas.width}x{canvas.height})")
# ——— 使用示例 ———
if __name__ == "__main__":
    images = [
        "assets/image/风格参考/sci-fi-ui.png",
        "assets/image/风格参考/pixel-rpg.png",
        "assets/image/风格参考/card-game.png",
        "assets/image/风格参考/casual-farm.png",
    ]
    labels = ["科幻 HUD 风格", "像素 RPG 风格", "卡牌游戏风格", "休闲农场风格"]
    compose_grid(images, labels, "assets/image/风格参考_合并.jpg")
跑完你会得到一张"风格总览图",4 张参考图变成 1 张,节省 3 个参考图槽位。
踩坑:中文标注全部变成方框 □□□脚本跑起来没报错,但生成的图片里所有中文都是 □□□
原因很直接:嗒啦啦的环境里只有 DejaVu 等英文字体,没有中文字体。PIL 遇到找不到字形的字符,直接画成空方框。
三步修复步骤 1:安装 MiSans 字体包
npm install misans
装完后字体文件在 node_modules/misans/lib/Normal/MiSans-Regular.*.woff2,是一堆按字符范围分片的 woff2 文件。
步骤 2:用 fontTools 把分片合并成一个 TTF
import os, glob
from fontTools.merge import Merger
shard_dir = "node_modules/misans/lib/Normal"
shard_paths = sorted(glob.glob(os.path.join(shard_dir, "MiSans-Regular.*.woff2")))
print(f"找到 {len(shard_paths)} 个分片")
merger = Merger()
merged = merger.merge(shard_paths)
merged.save("/home/Maker/misans_merged.ttf")
print("合并完成:/home/Maker/misans_merged.ttf")
分片较多时合并需要约 10-30 秒,等它跑完就好。
步骤 3:在拼图脚本里指定字体路径
font = ImageFont.truetype("/home/Maker/misans_merged.ttf", 26)
这就是前面完整脚本里的 font_path 参数,改好之后中文标注正常显示。
拼图完成后:传给 GPT 做风格生成拼好全景图后,传给 GPT 生图就简单多了:
reference_images: ["风格参考_合并.jpg", "我的游戏截图_合并.jpg"]
prompt: 基于参考图的视觉风格,为我的游戏生成一套 HUD 界面方案,
保持参考图中的色调和 UI 密度感,输出 16:9 横屏。
几个实用小技巧:
  • 第一张生成满意后,把它存下来当风格锚点,后续每轮都带上它,防止跨次生成风格漂移
  • prompt 里描述排版逻辑,拼图让 AI 看到素材,但排版意图还是要说清楚
  • 控制单张合并图在 400KB 以内;素材太多就拆成 p1/p2
不推荐的操作:用 edit_image 修文字有时候生成的图里文字位置或大小不对,可能会想用 edit_image 局部修改。
这个方法对文字的效果很差:会让文字变模糊(字糊了)。
更好的做法是:在 prompt 里明确描述文字要求重新生成,或者接受"AI 生成的文字本来就是装饰性的"——游戏里的真实文字用 UI 系统渲染,不依赖 AI 生图里的文字保持清晰。
快速参考:问题解决中文标注显示 □□□npm install misans → fontTools 合并分片 → PIL truetype参考图超过6张按内容分组,拼成全景图不同轮次风格漂移第一张满意后存为风格锚点,每轮带上它合并图太大识别变差单张控制在 400KB 内,过多拆成 p1/p2edit_image 改文字变模糊不用 edit_image 改文字,重新生成或接受 AI 文字是装饰
猜你想搜
taptap 制造拼图脚本代码
别再烧积分了!从每次 2000 到每次 50 的血泪经验截图
别再烧积分了!从每次 2000 到每次 50 的血泪经验
适用场景:所有在用 TapTap Code 开发游戏的小白 难度:★☆☆☆☆ 背景最近群里总有人"炫耀"一次操作花了几千积分,说实话这不是值得高兴的事——这是在告诉所有人你的开发方式有根本性问题。我也走过这条弯路,所以来说说怎么改。 积分消耗的本质是什么积分 = AI 处理的 token 数量 = 你发给 AI 的内容 + AI 回给你的内容所以烧积分的本质只有两种: 你让 AI 做了大量无效/重
精华
66 赞
20 回复
如何提升你游戏中的UI美术水平截图
如何提升你游戏中的UI美术水平
一、请为你的游戏挑选一款合适的字体 很多开发者没有注意到其实UI界面中最重要的元素是字体,一款合适的字体能给整个游戏的界面感官带来蜕变。 请看案例 那么如何挑选适合自己的字体呢? 我总结出了一些小经验可供参考: 黑体:通用 宋体:古风、武侠、修仙 楷体:古风、武侠、修仙 圆体:卡通、动漫、Q版 科技:科幻、未来、电子 顺手分享一个免费可商用字体网站: 当然 如果你不知道自己的游戏适合什么风格
精华
122 赞
44 回复
03:06
为了不被斩杀,我只能做到这些了截图
为了不被斩杀,我只能做到这些了
之前一直申请不到计划3,之前说太花哨,后面说体量完成度不足,在我一番小作文下,编辑终于给了我解答,什么原生质感,玩家开局体验啥的。 本来计划2也够用,准备以后再优化了,结果计划2赠送的积分要砍半了,学生党实在消费不起,于是只能再冲一波计划3了 从周六中午到现在一天半时间,优化了一遍角色卡,战斗卡,还有抽卡界面,优化了新手教程,该说不说确实比之前要舒服些。 前半部分为新版,后半部分为旧版。 明天再次
28 赞
6 回复
01:27
《大二暑假,我用AI做了一款属于自己的游戏》截图
《大二暑假,我用AI做了一款属于自己的游戏》
本人自制游戏现已加入taptap封闭测试(仅适配安卓机型)欢迎大家前来尝试(八月十号可以正式开始游玩) 如果有建议或者bug反馈可以加入qq群928501443 #发现好游戏 #游戏日常 #浅评一下 #今天游戏圈发生了啥
3 赞
开发心得-界面布局心得截图
开发心得-界面布局心得
大家好,我正在用 TapTap 制造制作一款2D 治愈林间徒步旅行游戏《徒步荒野》。 我分享一下我的开发心得,希望能有用,下面是一些界面布局的心得。 第一步:定版式、操作 先确定游戏是横版还是竖版、需要哪些操作按钮,敲定整体玩法思路。 我的玩法灵感参考《边境之旅》,主打散步看风景、沿途触发随机事件。 原版是 3D,考虑到自己是新手,选择2D 横版街机式来做,制作更简单、好上手。 第二步:敲定全局美
6 赞
2 回复
AI 生成的 NPC 太假?那是你没给它注入“灵魂” | TapTap 制造截图
AI 生成的 NPC 太假?那是你没给它注入“灵魂” | TapTap 制造
在多人或竞技游戏中,如何让 AI 队友不呆板?如何在高延迟下实现丝滑的竞技体验?本期我们采访了《猛攻兄弟》与《飞驰登山拉力赛车》的作者,分享他们的经验之谈~ 2026/03/30 - 2026/4/6 本期核心看点: 数据概览:该周上架游戏中动作策略模拟类持续领跑优质分发榜,占比均达 43.08%。 重点关注:让 AI 像活人,让同步“零延迟” —— 多人竞技开发实战 避坑指南:人工测评准入与分
精华
26 赞
6 回复
浅记《阿方的旅程》开发历程截图
浅记《阿方的旅程》开发历程
预计阅读时长10分钟,欢迎您先品鉴游戏,再回来看这篇“流水账” 这是我第一次实际接触“用自然语言制作游戏”,也是我第一次接触游戏开发工作,所以一切都是从零开始,跌跌撞撞,懵懵懂懂。[表情_豹哭] 我是通过获得的本次开发资格,6月22日晚,在微信公众号收到了测试资格的消息,最开始公布主题“跳跃”的时候,脑子里最先想到的就是几款非常经典的游戏「马里奥」「Flappy Bird」「Doodle Jump
9 赞
1 回复
2D 等轴测视角:完整理论截图
2D 等轴测视角:完整理论
2D 等轴测视角:完整理论 一、视角的本质 什么是等轴测 人站在高处斜着往下看地面,地面上的方格子不再是正方形,而变成了菱形。这就是等轴测的视觉本质。 俯视(正上方看下去): 等轴测(斜上方看下去): ┌──┬──┬──┐ ◇ ├──┼──┼──┤ ◇ ◇ ├──┼──┼──┤ ◇ ◇ ◇ └──┴──┴──┘ ◇ ◇ ◇ 正方形网格经过旋转 + 压缩,变成了菱形网格。 为什么是 2:1
6 赞
00:04
基于塔拉拉视频生成转序列帧动画的焚绝介绍截图
基于塔拉拉视频生成转序列帧动画的焚绝介绍
大家好~这里是道具屋经营物语。不对,这次是塔啦啦的西西弗斯大冒险~ 重所周知,嗒啦啦上次更新加入了视频生成的功能。为了参加十周年的活动(10W积分[表情_微笑]),悄悄研究了一下视频转序列帧的功能。话不多说,展示成果: 这是生成的视频: 这是视频转成的序列帧: 这是最后的实现效果: 可以看出来效果还是不错的。接下来我将介绍从视频生成到游戏应用按步骤一一介绍实现方法。希望可以帮到大家。 一、整体流程
精华
40 赞
13 回复
像素风游戏色彩实验:从 209 色到 24 色的互补色环提炼截图
像素风游戏色彩实验:从 209 色到 24 色的互补色环提炼
一次将"好看但混乱"的调色板收敛为"天然和谐"的系统化色板的过程记录。(因为只是实验,不知道是否成功,具体要看手绘作品。) 第一版色板(v1)有 209 个颜色,分了 21 个大类。颜色很多,搭出来也不难看,但总感觉缺少"一气呵成"的统一感。仔细分析后发现症结——209 色散布在色环的各个角落,虽然单个类别内部有梯度,但类别之间缺少系统性的色相约束。简单说:颜色是一个一个从参考游戏"吸"来的,而不
精华
18 赞
17 回复