图像生成
所选图像服务为 ctx.imageGeneration。它返回自包含的 Blob,而不是远程 URL。
const result = await ctx.imageGeneration.generate('冬季风暴中的灯塔', {
count: 1,
references: [{data: portrait, description: '保留此角色'}],
signal,
})
const [{data, mediaType, revisedPrompt}] = result.images
count 必须是正整数。参考图包含图像 Blob 和可选的提供方无关说明;提供方可能另有限制。
OpenAI 兼容选项
| 选项 | 含义 |
|---|---|
size | 提供方支持的尺寸,例如 1024x1024 |
quality | auto、low、medium、high 等质量设置 |
style | vivid、natural 等提供方专属风格 |
background | auto、opaque 或 transparent |
outputFormat | png、jpeg 或 webp |
outputCompression | 0 到 100 的整数 |
user | 可选最终用户标识 |
无参考图时以 JSON 调用 POST /images/generations;有参考图时以 multipart 表单调用 POST /images/edits。Base64 响应会直接转换为 Blob,URL 响应会在调用结束前下载。
保存结果
generate() 返回时,每张生成图都已完整可用。应使用 mediaType 选择存储元数据或文件扩展名;revisedPrompt 只应作为可选来源信息保存,因为并非所有提供方都会返回。结果中的 model 表明实际处理请求的模型。
for (const [index, image] of result.images.entries()) {
await assets.write(`generation-${index}`, image.data, {
mediaType: image.mediaType,
model: result.model,
revisedPrompt: image.revisedPrompt,
})
}
Blob 由调用方负责。若结果需要跨会话保留,应复制到应用存储中,而不是长期持有对象 URL;对象 URL 属于浏览器进程资源,并且可能被撤销。
参考图与可移植性
共享契约规定参考图用于保留身份或构图,但不同提供方遵循参考图的强度及可接受数量并不相同。description 应简短并明确说明该参考图的用途。不要假设某图像提供方接受的请求可以原样移植到另一家。
highRes 会在提供方支持时请求二次放大渲染。不支持的提供方可以忽略它,因此使用方应检查返回图像,而不是把该标记当作尺寸保证。
验证与重试
空提示词、无效数量、无效压缩值或不可用的参考图属于 invalid-input。不支持的组合为 unsupported;策略、模型、配额或凭据拒绝为 rejected。图像请求可能成本较高且不会自动保证幂等,因此只有在可以接受重复输出时才应重试。