上周在做一个营销海报自动生成的需求,要求图里带中文文案。试了一圈 FLUX、Midjourney,中文要么乱码要么缺笔画,气得我差点手动 P 图。
然后看到阿里把 Qwen-Image 2.0 开源了——7B 参数,比上一代 20B 还小了快 3 倍,但中文渲染效果直接拉满。我花了两天把 API 调通了,这篇把完整过程和踩的坑都记下来。
先说结论
| 维度 | Qwen-Image 2.0 | FLUX.1 Dev | Midjourney v6 |
|---|---|---|---|
| 中文渲染 | ⭐⭐⭐⭐⭐ 几乎无错字 | ⭐⭐ 短文本勉强 | ⭐⭐⭐ 偶尔翻车 |
| 英文渲染 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 生成速度 | 3-8 秒 | 1-3 秒 | 10-30 秒 |
| 最大分辨率 | 2048×2048 原生 | 1024×1024+ | 2048×2048 |
| DPG-Bench | 88.32 | 83.84 | - |
| 价格 | 百炼免费额度 | ~$0.03/张 | $10/月起 |
| 开源 | ✅ Apache 2.0 | ✅ | ❌ |
结论就一句话:要在图里加中文,目前没有比 Qwen-Image 2.0 更靠谱的。
为什么中文渲染这么难?
搞过 AI 生图的应该都有体会——让 FLUX 画一张「新年快乐」的海报,出来的字能让你怀疑人生。「乐」字少一横,「年」字多一撇,各种离谱。
根本原因是大多数生图模型的训练数据以英文为主,中文字符的笔画结构远比拉丁字母复杂。一个「龍」字 16 画,模型根本画不明白。
Qwen-Image 2.0 的做法是在架构层面做了调整:用 8B 的 Qwen3-VL 做文本编码器,这个编码器本身就深度理解中文语义和字形,再配合 7B 的扩散解码器生成图片。文字渲染不是后期打补丁,而是从编码阶段就解决了。
3 种调用方式实测
方案一:DashScope SDK(最简单)
阿里百炼平台直接支持,注册就送免费额度。
pip install dashscope
import dashscope
import os
import requests
dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'
from dashscope import MultiModalConversation
def generate_image(prompt, size='1024*1024'):
messages = [{
"role": "user",
"content": [{"text": prompt}]
}]
response = MultiModalConversation.call(
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen-image-2.0",
messages=messages,
watermark=False,
prompt_extend=True,
size=size
)
if response.status_code == 200:
# 提取图片 URL(24 小时有效,赶紧下载)
content = response.output.choices[0].message.content
for item in content:
if 'image' in item:
img_url = item['image']
img_data = requests.get(img_url).content
with open('output.png', 'wb') as f:
f.write(img_data)
print(f"图片已保存: output.png")
return img_url
else:
print(f"生成失败: {response.code} - {response.message}")
return None
# 测试中文渲染
generate_image("一张赛博朋克风格的海报,正中央大字写着「AI 改变世界」,底部小字「Powered by Qwen」")
跑完我看了下效果——「AI 改变世界」六个字,笔画清晰、排版居中,没有一个错字。说实话有点惊到我了。
方案二:HTTP API 直接调(不想装 SDK 的看这里)
import requests
import os
import time
API_KEY = os.getenv("DASHSCOPE_API_KEY")
BASE_URL = "https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation"
def generate_image_http(prompt, model="qwen-image-2.0", size="1024*1024"):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable" # 异步模式
}
payload = {
"model": model,
"input": {
"messages": [{
"role": "user",
"content": [{"text": prompt}]
}]
},
"parameters": {
"size": size,
"n": 1,
"watermark": False,
"prompt_extend": True
}
}
# 提交任务
resp = requests.post(BASE_URL, json=payload, headers=headers)
task_id = resp.json()["output"]["task_id"]
print(f"任务已提交: {task_id}")
# 轮询结果
check_url = f"https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}"
while True:
time.sleep(3)
result = requests.get(check_url, headers={"Authorization": f"Bearer {API_KEY}"}).json()
status = result["output"]["task_status"]
if status == "SUCCEEDED":
img_url = result["output"]["results"][0]["url"]
print(f"生成成功: {img_url}")
return img_url
elif status == "FAILED":
print(f"生成失败: {result}")
return None
print(f"状态: {status},继续等待...")
generate_image_http("中国风水墨画,山水之间一座古亭,亭上匾额写着「听雨阁」三个楷书大字")
方案三:OpenAI 兼容接口(改一行代码切换模型)
如果你的项目本来就在用 OpenAI SDK,其实不用换 SDK,很多 API 聚合平台都支持 OpenAI 协议转发。比如我在用的 ofox.ai,改个 base_url 就能调 Qwen-Image:
from openai import OpenAI
client = OpenAI(
api_key="your-api-key",
base_url="https://api.ofox.ai/v1" # 兼容 OpenAI 协议的聚合接口
)
response = client.images.generate(
model="qwen-image-2.0",
prompt="一张科技感十足的产品发布会邀请函,标题「2026 AI 开发者大会」,底部日期「3月15日 北京」",
size="1024x1024",
n=1
)
print(response.data[0].url)
这种方式的好处是代码完全不用动,只要平台支持对应模型,换个 model 参数就行。我之前在 FLUX 和 Qwen-Image 之间切来切去测试,就是靠这个。
踩坑记录
坑 1:图片 URL 只有 24 小时有效
DashScope 返回的图片地址是临时的,过期就 404 了。一定要在回调里立刻下载保存,别偷懒存 URL。
我第一次就是只存了 URL,第二天打开全是空白,又重新生成了一遍。
坑 2:prompt_extend 有时候会「加戏」
prompt_extend=True 会让模型自动扩写你的提示词,生成效果确实更好。但有时候它会自己加东西——比如我写「白色背景,文字'你好'」,它给我扩写成了一段很长的描述,最后文字变成了「你好世界」。
解决办法:对文字精确度要求高的场景,把 prompt_extend 设为 False。
坑 3:大尺寸生成偶尔超时
2048×2048 的图偶尔会超时,特别是用 Pro 模型的时候。我的经验是:
- 日常用
qwen-image-2.0(加速版),1024×1024,3-5 秒出图 - 需要高质量文字的用
qwen-image-2.0-pro,但做好 10 秒以上的心理准备 - 批量生成建议用异步接口 + 队列,别用同步卡着
坑 4:中文标点和特殊符号
中文冒号「:」和英文冒号「:」在渲染效果上有区别。建议 prompt 里统一用中文标点,模型对中文标点的理解更准确。
和 FLUX 的正面对决
同样的 prompt:「一张名片设计,姓名:张伟,职位:高级架构师,公司:星辰科技有限公司」
- FLUX.1 Dev:「张伟」勉强能认,「高级架构师」直接乱码,公司名半对半错
- Qwen-Image 2.0:所有文字清晰准确,排版也合理
再试一个复杂的:「中国风茶叶包装盒,正面写「龙井春茶」四个毛笔字,侧面写「产地:杭州西湖」」
- FLUX.1 Dev:出了一些像中文的笔画,但完全不是字
- Qwen-Image 2.0:「龙井春茶」四个字有模有样,虽然毛笔效果还不够自然,但至少认得出来
适用场景总结
强烈推荐用 Qwen-Image 2.0 的场景:
- 营销海报 / Banner 自动生成
- 产品包装设计稿
- 社交媒体配图(需要带文字的)
- 名片、邀请函等模板生成
- 中英文混排的 infographic
还是用 FLUX 更好的场景:
- 纯艺术创作(不需要文字)
- 对生成速度要求极高
- 已有成熟的 FLUX LoRA 工作流
小结
Qwen-Image 2.0 确实在中文文字渲染上打了个翻身仗。7B 参数做到这个效果,阿里这波技术力我是服的。
当然它也不是万能的——复杂排版、手写体模拟这些还有提升空间。但作为 API 调用方案,注册百炼就能免费用,或者通过 OpenAI 兼容接口一行代码切换,上手成本几乎为零。
做文生图相关需求的,强烈建议试一下。