Qwen-Image-3.0 能接收哪种图像输入,通常由模型外层封装决定,而不是模型本身单独定义。在本地推理框架(如 Transformers、Diffusers)里,模型一般直接吃解码后的 RGB 数组;在 HTTP 服务里,图像往往以 Base64 字符串或公网 URL 传进去。所以先确认你是在跑本地脚本还是在调 API,再判断格式。
没有明确文档时,优先准备 JPEG、PNG、WebP 三种常见位图格式。图像通常以 Base64 编码或 URL 方式传输,模型内部会统一转成 RGB 数组再计算。若接口报格式错误,优先检查编码是否完整、文件是否损坏、尺寸是否超限,并用最小测试图逐类验证。
先分清:本地推理 vs API 调用
如果你用 Python 直接加载权重,常见做法是用 PIL 打开图像,再转成 numpy 数组或 tensor。这个环节里,PIL 能打开的文件格式基本就是模型入口支持的格式,比如 PNG、JPEG、BMP、WebP、TIFF。你需要提前做一次 .convert('RGB'),避免出现 RGBA 或灰度图导致维度报错。
如果你走的是 API 接口,服务端一般会定义图像字段为 image 或 image_url。有的实现只接受 Base64 字符串,有的同时接受 HTTP/HTTPS 链接。这两种方式对文件格式没有额外限制,因为服务端拿到后再解码,最终都变成像素数组。
常见格式的技术边界
- JPEG/JPG:最通用,压缩后体积小,但可能有有损压缩痕迹。API 传输时优先选这个,解码快、失败率低。
- PNG:无损,支持透明通道。若输入带 alpha,注意模型是否需要忽略透明度;通常要转成 RGB。
- WebP:体积比 JPEG 更小,兼容性中等。如果平台支持,可以直接传;不确认时先转成 PNG/JPEG。
- BMP/TIFF:本地推理常见,但 API 端不一定支持。建议先压缩转换。
- GIF、SVG、ICON:GIF 一般只能取第一帧,SVG 必须先栅格化,ICON 极少见。不要直接传原文件。
自己搭本地推理时,用一段脚本验证
如果你能加载模型但不确定格式,可以用下面这个骨架跑一遍。重点是把图片转成模型最终需要的张量格式,不同模型要求略有差异,但核心路径基本一致。
from PIL import Image
import torch
"""
假设你已有 model 和 processor,或者手动做预处理。
这里演示如何从不同格式文件得到 RGB 张量。
"""
def load_as_rgb(path):
img = Image.open(path)
img = img.convert("RGB")
return img
# 逐个测试
for p in ["/tmp/test.jpg", "/tmp/test.png", "/tmp/test.webp", "/tmp/test.bmp"]:
try:
im = load_as_rgb(p)
# 继续走你们模型要求的 preprocess,例如 resize、归一化
print(p, "-> OK", im.size)
except Exception as e:
print(p, "-> FAIL", e)
执行后看哪几个能通过。失败原因通常是“无法识别图像文件”,说明该格式在 PIL 层就解不开;如果是“尺寸过大”或“channel 不匹配”,则需要调整预处理步骤。
API 接入时,先按 Base64 或 URL 各测一次
很多接口支持两种方式,但个别环境只开通其中一种。如果你拿不准,先造一个 1x1 像素的 PNG,分别用 Base64 和 URL 试提交一次。参考请求骨架如下(具体字段名以你的服务端为准):
POST /v1/vision
Content-Type: application/json
{
"model": "qwen-image-3.0",
"image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/p9sAAAAASUVORK5CYII="
}
把 Base64 换成下面的 URL 形式,看接口是否识别:
{
"model": "qwen-image-3.0",
"image_url": "https://example.com/test.png"
}
如果都返回 200,说明服务端对两种方式都接受。如果其中一个报错,就以可用方式提交。注意 URL 必须是公网可访问的,否则服务端拉取不到图片。
验证清单:按顺序排查
- 先确认入口是本地函数还是 HTTP API。
- 本地直接用 PIL 打开测试图,确认格式能解码。
- API 接口先用 1x1 最小 PNG 试通。
- 再换正常尺寸的 JPEG、WebP 各测一次。
- 如果某格式报错,把报错信息中的 MIME 类型或编码错误记录,反向调整输入。
常见问题
能传 GIF 动图吗?
通常只能取第一帧。如果模型是视频模型或专门处理动图的,可能有额外通道;普通图像模型不支持多帧输入。
支持 SVG 矢量图吗?
不支持直接输入。SVG 需要先渲染成位图(PNG/JPEG)再传给模型。本地用 cairosvg 或 PIL 的 ImageOpen 按需转换。
图像大小有限制吗?
有限制。API 端常要求图像编码后不超过 20MB,分辨率也要低于模型训练尺寸。用大图前建议先缩放,避免超限后报错。
明确你的部署形态后,先用最小样例验证,再逐步叠加真实图片。如果格式报错,优先检查编码完整性,而不是立刻换另一种格式。这样能最快定位问题。