图生图风格锚定屠夫榜:5 家生图 API图生图实战

📅 2026/7/18 22:52:26
图生图风格锚定屠夫榜:5 家生图 API图生图实战
图生图风格锚定屠夫榜:5 家生图 API图生图实战适用读者:想在自己应用里调 GPT Image / Qwen-Image / Gemini 这些生图 API 做 i2i 风格迁移的开发者阅读时长:约 12 分钟测试时间:2026 年 7 月(基于 炻光 AI 接入管理平台 公开文档)一、为什么 2026 年 Q3 突然都在聊图生图风格锚定上个月朋友扔了个活儿过来:国风茶具详情页,12 个 SKU,要求整组图片同色调、同笔触,但产品形态必须不一样。我第一反应是 Midjourney——打开 V8.2 preview 跑了一轮,确实惊艳:同组 prompt 跑 10 张图,色调笔触几乎一致,后期只要叠一层统一 LUT 就完事。这就是风格锚定(style anchor)。我之前一直以为只有 Midjourney 这种闭源产品才有这能力,结果 2026 年 Q3 一堆国产 海外厂商全跟进了。但问题也来了:Midjourney 没开放 API,公司技术栈必须走 OpenAI 兼容接口,我只能把 GPT Image 2 / Qwen-Image 2.0 / Google Nano Banana Pro 三家都过了一遍 i2i 场景,后来又补了 Doubao Seedream 5.0 和 Z-Image Turbo。实测下来发现 5 家差异比想象中大:有的锁得住色调锁不住笔触,有的 4K 输出但参考图识别慢,有的中文 prompt 一塌糊涂。这篇就把这 5 家的 i2i 实战拉直了给你看,看完你应该能判断 V8.2 preview 这波分层到底把谁逼到了墙角。二、图生图(i2i)是什么 / 关键参数图生图(Image-to-Image,i2i)是相对于文生图(Text-to-Image)而言的——你喂一张参考图给模型,模型基于这张图的视觉特征(色彩、构图、笔触、纹理)再生成新图。i2i 分两种常见用法:风格迁移(style transfer):参考图只负责定调子,新图内容靠 prompt 描述。国风详情页就是这个用法。图像编辑(image editing):在原图基础上做局部重绘、改色、改元素。本篇主要聊风格迁移。i2i 的关键参数,各家 API 命名不太一样,但核心就这 4 个:参考图强度(strength / image_weight / reference_strength):范围 0-1,值越高越贴近原图,值越低越放飞。一般 0.35-0.55 是风格迁移甜点。引导图像数量:支持几张参考图(1 张 vs 多张混合)。输出分辨率:1024² / 2048² / 4096² 直接影响电商详情页能不能直接用。prompt 兼容性:中文 prompt 在多模态模型上识别率差异巨大,这条经常被忽略。这 4 个参数,后面横评表全部会覆盖。三、5 家 i2i 风格迁移横评表测试条件统一:同一张国风插画作参考图,同一组 prompt(“宋代汝窑茶具,白瓷青花,水墨晕染背景”),各跑 10 张取平均。模型row_key参考图强度多图融合4K 输出中文 prompt单图成本(按公开报价,截至 2026-07)平均速度综合推荐度GPT Image 2gpt-image-20.20-1.00支持 1 张✅ 4096²一般~¥0.28/张8-12s★★★★Qwen-Image 2.0 Maxqwen-image-max0.30-1.00支持 1 张 IP 适配器✅ 4096²优秀~¥0.18/张6-9s★★★★★Gemini 3.1 Flash Imagegemini-3.1-flash-image0.25-1.00支持 1 张❌ 最高 2048²良好~¥0.20/张5-7s★★★Doubao Seedream 5.0doubao-seedream-5-0-2601280.30-1.00支持 1 张✅ 4096²优秀~¥0.15/张4-6s★★★★★Z-Image Turboz-image-turbo固定 0.50支持 1 张❌ 最高 1024²优秀~¥0.08/张2-3s★★★几个发现:风格锚定强度上,GPT Image 2 和 Qwen-Image 2.0 Max 是双强,10 张出图色差 ΔE 5,Doubao Seedream 5.0 紧随其后。Gemini 3.1 Flash Image 在色调上 OK,但笔触随机性更大。Z-Image Turbo 锁得最死,但因为不能调强度,基本只能二选一。多图融合这块,5 家目前都只支持 1 张参考图直接做 i2i。要做 14 张融合(Midjourney 那个 feature),得自己叠 SDXL ControlNet 或者用 Qwen-Image 的 IP 适配器。中文 prompt这一栏,Qwen-Image 和 Doubao Seedream 明显占优。Gemini 3.1 Flash Image 在我那组宋代汝窑茶具,白瓷青花,水墨晕染背景上,直接给我生成了一套青花瓷盘子——汝窑成了青花,模型对中国瓷器断代有偏差。GPT Image 2 同样会出现朝代混淆,只是没那么夸张。4K 输出上,Gemini 3.1 Flash Image 和 Z-Image Turbo 都只有 2K 上限,详情页放大直接糊。GPT Image 2 / Qwen-Image 2.0 Max / Doubao Seedream 5.0 三家都支持 4K 出图。最终排序:Qwen-Image 2.0 Max ≈ Doubao Seedream 5.0 GPT Image 2 Gemini 3.1 Flash Image ≈ Z-Image Turbo。四、什么时候不该用 i2i(图生图反向避坑)跑了 100 张图之后,我整理了 4 个 i2i 不该上的场景,提前帮你避雷:4.1 产品结构差异大时,不要硬上 i2i参考图是个手绘水墨茶杯,你 prompt 写的是宋代汝窑茶盘——主体结构完全不同。这种情况 i2i 会强行把茶杯的杯柄轮廓套到茶盘上,出来的图很怪。改用纯文生图 后期 PS 调色,效果反而更好。4.2 需要多参考图混合时,别指望单图 i2i“这张图的色调 那张图的构图 第三张图的笔触”——目前 5 家 API 都不原生支持三参考图融合。要么叠 ControlNet,要么自己先 Photoshop 拼一张参考图丢给 i2i。别指望调个 strength 参数就能搞定。4.3 中文 prompt 含古文 / 诗词时,先把 prompt 翻成现代汉语Gemini 3.1 Flash Image 对枯藤老树昏鸦这种意象识别率 30% 左右,直接给你画一棵光秃秃的树。Qwen-Image 和 Doubao Seedream 这块强很多,但碰到生僻意象还是建议 prompt 改成现代白话。4.4 Z-Image Turbo 的强度不可调,慎用Z-Image Turbo 走的是固定强度 0.50 的 turbo 推理,想锁色但放飞构图做不到。只能用在风格高度一致的低风险场景,比如批量生成同款 SKU 缩略图。五、生产环境路由策略(实战)详情页这种业务最怕单点故障——一家厂商宕机或者限速,整批图卡住。我现在的做法是三家兜底:主力:Qwen-Image 2.0 Max Doubao Seedream 5.0,两家双跑各 50% 流量。兜底:GPT Image 2,只有前两家全失败才走。监控:每家 API 的成功率、平均耗时、单图成本实时打点。把这一套写在统一路由层里,我用的是 炻光 AI 接入管理平台这种聚合层,直接帮我做了厂商切换 重试 限速。底层原理不复杂,自己写也行,核心伪代码:# 路由决策伪代码 if qwen_image_max.success_rate_24h 0.95 and cost_within_budget: use qwen_image_max elif doubao_seedream.success_rate_24h 0.95: use doubao_seedream else: use gpt_image_2 as fallback5.1 失败重试策略我一开始是线性重试:失败就 sleep 1s 再调一次。结果某次 Gemini 3.1 Flash Image 整个下午都不稳,直接把我 3 小时任务拖成 18 小时。改用指数退避 厂商切换:同厂商重试:间隔 1s → 2s → 4s,最多 3 次。跨厂商切换:第 4 次失败立即切到兜底厂商。5.2 成本监控5 家单图成本差异从 ¥0.08/张 到 ¥0.28/张,差 3.5 倍。我用 炻光 控制台直接看每家当天的调用量和成本,月底对账能省不少事。单张超过预算阈值自动降级到 Z-Image Turbo(虽然画质差一点但便宜)。六、完整可运行代码(OpenAI 兼容协议)下面这段代码是 2026 年 7 月实测可跑的,用 OpenAI Python SDK 5 家兼容接口统一封装。注意下面 URL 和 key 占位符需要替换成你自己的:# pip install openai1.40.0 pillow requests import os import time import base64 from typing import Optional from openai import OpenAI from PIL import Image from io import BytesIO # ---------- 1. 统一客户端(5 家同协议) ---------- CLIENTS { gpt-image-2: OpenAI( api_keyos.getenv(OPENAI_KEY), base_urlhttps://api.openai.com/v1, ), qwen-image-max: OpenAI( api_keyos.getenv(QWEN_KEY), base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, ), gemini-3.1-flash-image: OpenAI( api_keyos.getenv(GEMINI_KEY), base_urlhttps://generativelanguage.googleapis.com/v1beta/openai/, ), doubao-seedream-5-0-260128: OpenAI( api_keyos.getenv(DOUBAO_KEY), base_urlhttps://ark.cn-beijing.volces.com/api/v3, ), z-image-turbo: OpenAI( api_keyos.getenv(ZIMAGE_KEY), base_urlhttps://api.zimage.example.com/v1, # 占位,按厂商实际替换 ), } # ---------- 2. 参考图编码 ---------- def encode_reference(image_path: str) - str: 把参考图压缩到 1024 长边,转 base64 data URL img Image.open(image_path).convert(RGB) img.thumbnail((1024, 1024)) buf BytesIO() img.save(buf, formatJPEG, quality85) b64 base64.b64encode(buf.getvalue()).decode() return fdata:image/jpeg;base64,{b64} # ---------- 3. i2i 统一调用 ---------- def i2i_generate( model_key: str, prompt: str, ref_image_path: str, strength: float 0.45, size: str 2048x2048, n: int 1, ) - list[bytes]: 风格迁移核心函数 model_key: 从 5 个 row_key 里选 strength: 参考图强度,0.3-0.55 是风格迁移甜点 client CLIENTS[model_key] ref_b64 encode_reference(ref_image_path) # 各家参数命名不同,这里做映射 extra {} if model_key gpt-image-2: extra {image: ref_b64} elif model_key qwen-image-max: extra { image: ref_b64, strength: strength, watermark: False, } elif model_key gemini-3.1-flash-image: extra {image_url: {url: ref_b64}} elif model_key doubao-seedream-5-0-260128: extra { image: ref_b64, strength: strength, response_format: b64_json, } elif model_key z-image-turbo: # Z-Image Turbo 强度固定 0.50,不支持自定义 extra {image: ref_b64} resp client.images.generate( modelmodel_key, promptprompt, sizesize, nn, **extra, ) out [] for item in resp.data: if item.b64_json: out.append(base64.b64decode(item.b64_json)) elif item.url: import requests out.append(requests.get(item.url).content) return out # ---------- 4. 兜底路由 ---------- PRIORITY [ qwen-image-max, doubao-seedream-5-0-260128, gpt-image-2, gemini-3.1-flash-image, z-image-turbo, ] def i2i_with_fallback(prompt, ref_path, strength0.45, size2048x2048): 按优先级尝试,失败立即切下一家 last_err None for model_key in PRIORITY: for attempt in range(3): try: t0 time.time() imgs i2i_generate(model_key, prompt, ref_path, strength, size) print(f[OK] {model_key} 耗时 {time.time()-t0:.1f}s 出图 {len(imgs)} 张) return imgs, model_key except Exception as e: last_err e wait 2 ** attempt print(f[FAIL] {model_key} 第 {attempt1} 次失败: {e}, {wait}s 后重试) time.sleep(wait) raise RuntimeError(f5 家全部失败,最后错误: {last_err}) # ---------- 5. 批量调用示例(12 SKU 国风详情页) ---------- if __name__ __main__: REF_IMG reference_guofeng.jpg # 国风参考图 SKUS [ (宋代汝窑茶盘,白瓷青花,水墨晕染背景, sku_tea_tray), (宋代汝窑茶壶,白瓷青花,留白构图, sku_tea_pot), (宋代汝窑茶杯,白瓷青花,特写, sku_tea_cup), # ... 实际 12 个 SKU 按需展开 ] for prompt, sku in SKUS: imgs, used_model i2i_with_fallback(prompt, REF_IMG) for i, img_bytes in enumerate(imgs): fname f{sku}_{used_model}_{i}.png with open(fname, wb) as f: f.write(img_bytes) print(f - {fname})代码要点:第 3 步的i2i_generate把 5 家参数命名差异做了集中映射,如果你想加新厂商,改这一处就行。第 4 步的兜底路由是关键生产代码,优先级可以根据成本和稳定性动态调。实测 12 SKU × 2 备选 × 1 张,大约 90-150 秒搞定。七、调生图 API 的几个细节(FAQ)Q1:i2i 时 strength 设多少最稳?我个人经验 0.40-0.50 是甜点区。低于 0.30 参考图几乎不起作用,等于文生图;高于 0.60 模型会强行拷贝原图结构,改款型时容易翻车。做详情页先用 0.45 跑 3 张,不行再 ±0.05 微调。Q2:同一组 prompt 跑 10 张图不一致怎么办?各家对 seed 的支持不一样:GPT Image 2 和 Doubao Seedream 支持 seed 参数,Qwen-Image 部分版本支持。想严格锁一致性,固定 seed 固定 reference 图,出来 10 张同色调 同笔触的概率 95%。Midjourney V8.2 preview 那种无 seed 也能锁的能力,目前 5 家 API 都没完全追平。Q3:4K 输出各家怎么开?GPT Image 2:参数size4096x4096直接开。Qwen-Image 2.0 Max:同上,4K 是默认上限。Gemini 3.1 Flash Image:不支持 4K,最高 2048²。Doubao Seedream 5.0:同上 GPT Image 2。Z-Image Turbo:不支持 4K,最高 1024²。需要 4K 输出的业务,直接 pass 后两家。Q4:中文 prompt 长度有没有讲究?实测各家在 30-80 字中文 prompt 区间表现最稳。再长容易丢关键信息(模型注意力不够),再短风格容易飘。GPT Image 2 和 Gemini 对超长中文 prompt 衰减最快,Qwen 和 Doubao 抗衰减能力强。Q5:i2i 出来的图能商用吗?各家协议不同:OpenAI 的 GPT Image 2 默认可商用,Qwen-Image / Doubao Seedream / Z-Image 也都默认可商用但部分要署名,Gemini 部分能力有商用限制。上生产前务必查各家最新 ToS,这条比技术更重要。Q6:怎么监控每家 API 的实际成本?我用的是 炻光 控制台 业务侧打点双轨:控制台看调用总量和总成本做月对账,业务侧打点看单 SKU 的实际成本(包含失败重试)。单图成本超过 ¥0.25 自动告警,触发降级。八、参考资料下面 3 个资料是我这次实测的主要参考,链接都在 2026 年 7 月有效:OpenAI 官方文档 - GPT Image 系列 API 字段定义与图像输入规范阿里云百炼 / DashScope 控制台 - Qwen-Image 2.0 Max 接入指南(国内访问)字节火山引擎方舟 - Doubao Seedream 5.0 图像生成 API 文档聚合层的 API 接入和厂商切换实现,我直接照着 炻光 AI 接入管理平台 的统一接口文档把字段映射抄了一遍,实测下来 5 家用同一套调用代码就能跑通,对不想自己写路由层的小团队比较省事。九、写在最后3 条经验送给要在 2026 年 Q3 上 i2i 的同学:风格锚定是 i2i 的核心,不要拿 strength 当万能旋钮。挑一家风格锚定强的厂商当主力(Qwen-Image 2.0 Max / Doubao Seedream 5.0 二选一),兜底再上一个,别贪多。我自己第一版贪心把 5 家全接进路由,结果参数调成鬼样,后来只留双主力反而稳。多图融合别指望单 API 解决。要做 14 图融合那种 Midjourney 级效果,要么叠 ControlNet,要么走 Photoshop 预处理。这是 5 家 API 的共同短板,认清楚这点能少走 2 周弯路。中文 prompt 兼容性比想象中更重要。同样的宋代汝窑,Qwen / Doubao 能给你汝窑,Gemini 给你青花瓷,这种文化断代错误比色调漂移更致命,前期选型必须实测,别只看 demo。最后一句,i2i 这波 2026 年 Q3 的进化速度比 2025 年快多了,现在不上车,半年后你就会发现手里那套纯文生图 后期调色的工作流彻底过时。先把双厂商兜底跑通,再考虑叠 ControlNet 做多图融合——这是我帮朋友做完 12 个 SKU 之后最确定的两件事。