介绍
图片 API 提供了三种与图片交互的方法:
- 根据文本提示从头开始创建图像
- 根据新的文本提示创建现有图像的编辑
- 创建现有图像的变体
本指南涵盖了使用这三个 API 端点的基础知识以及有用的代码示例。 要查看它们的实际效果,请查看我们的 DALL·E 预览应用。
图片 API 处于测试阶段。 在此期间,API 和模型将根据您的反馈进行改进。 为确保所有用户都能轻松制作原型,默认速率限制为每分钟 50 张图像。 如果您想提高速率限制,请查看这篇帮助中心文章。 随着我们对使用和容量要求的更多了解,我们将提高默认速率限制。
用法
关于图像生成
图像生成 端点允许您在给定文本提示的情况下创建原始图像。 生成的图像的大小可以为 256x256、512x512 或 1024x1024 像素。 较小的尺寸生成速度更快。 您可以使用 n 参数一次请求 1-10 张图像。
curl https://api.openai.com/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"prompt": "a white siamese cat",
"n": 1,
"size": "1024x1024"
}'
描述越详细,您就越有可能获得您或您的最终用户想要的结果。 您可以探索 DALL·E 预览应用 中的示例以获得更多提示灵感。 这是一个简单的例子:
使用 response_format 参数,可以将每个图像作为 URL 或 Base64 数据返回。 URL 将在一小时后过期。
编辑
图像编辑 端点允许您通过上传遮罩来编辑和扩展图像。 遮罩的透明区域指示应编辑图像的位置,提示应描述完整的新图像,而不仅仅是擦除区域。 此端点可以启用类似 我们的 DALL·E 预览应用程序中的编辑器 的体验。
curl https://api.openai.com/v1/images/edits \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F image="@sunlit_lounge.png" \
-F mask="@mask.png" \
-F prompt="A sunlit indoor lounge area with a pool containing a flamingo" \
-F n=1 \
-F size="1024x1024"
提示:阳光明媚的室内休息区,带有一个装有火烈鸟的游泳池
上载的图像和掩码都必须是大小小于4MB的正方形PNG图像,并且必须具有与彼此相同的尺寸。 生成输出时,不会使用蒙版的非透明区域,因此它们不一定需要像上面的示例那样匹配原始图像。
变量
图像变量 端点允许您生成给定图像的变量。
curl https://api.openai.com/v1/images/variations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F image='@corgi_and_cat_paw.png' \
-F n=1 \
-F size="1024x1024"
与编辑端点相似,输入图像必须是大小小于4MB的平方PNG图像。
内容审核
提示和图像是根据我们的内容策略过滤的,当提示或图像被标记时返回错误。 如果您对误报或相关问题有任何反馈,请通过我们的帮助中心与我们联系。
特定语言提示
使用内存中的图像数据
上面指南中的 Node.js 示例使用 fs 模块从磁盘读取图像数据。 在某些情况下,您可能会将图像数据保存在内存中。 下面是一个 API 调用示例,它使用存储在 Node.js Buffer
对象中的图像数据:
// This is the Buffer object that contains your image data
const buffer = [your image data];
// Set a `name` that ends with .png so that the API knows it's a PNG image
buffer.name = "image.png";
const response = await openai.createImageVariation(
buffer,
1,
"1024x1024"
);
使用打字稿
如果您使用的是 TypeScript,您可能会遇到一些图像文件参数的问题。 下面是通过显式转换参数来解决类型不匹配的示例:
// 将 ReadStream 转换为`any`以安抚 TypeScript 编译器
const response = await openai.createImageVariation(
fs.createReadStream('image.png') as any,
1,
'1024x1024'
)
这是内存中图像数据的类似示例:
// 这是包含图像数据的 Buffer 对象
const buffer: Buffer = [your image data];
// 将缓冲区转换为 any 以便我们可以设置 name 属性
const file: any = buffer;
// 设置以 .png 结尾的“名称”,以便 API 知道它是 PNG 图片
file.name = "image.png";
const response = await openai.createImageVariation(
file,
1,
"1024x1024"
);
错误处理
API 请求可能会由于无效输入、速率限制或其他问题而返回错误。 这些错误可以用 try...catch
语句处理,错误详细信息可以在 error.response
或 error.message
中找到:
try {
const response = await openai.createImageVariation(
fs.createReadStream('image.png'),
1,
'1024x1024'
)
console.log(response.data.data[0].url)
}
catch (error) {
if (error.response) {
console.log(error.response.status)
console.log(error.response.data)
}
else {
console.log(error.message)
}
}