了解如何使用我们的 DALL·E 模型生成或处理图像

介绍

图片 API 提供了三种与图片交互的方法:
  1. 根据文本提示从头开始创建图像
  2. 根据新文本提示创建现有图像的编辑
  3. 创建现有图像的变体
本指南涵盖了使用这三个 API 端点的基础知识以及有用的代码示例。要查看它们的实际效果,请查看我们的DALL·E 预览应用程序

图片 API 处于测试阶段。在此期间,API 和模型将根据您的反馈进行改进。为确保所有用户都能轻松制作原型,默认速率限制为每分钟 50 张图像。您可以在我们的速率限制指南中了解有关速率限制的更多信息。

用法

几代人

图像生成端点允许您在给定文本提示的情况下创建原始图像。生成的图像的大小可以为 256x256、512x512 或 1024x1024 像素。较小的尺寸生成速度更快。您可以使用n参数一次请求 1-10 张图像
  1. response = openai.Image.create(
  2. prompt="a white siamese cat",
  3. n=1,
  4. size="1024x1024"
  5. )
  6. image_url = response['data'][0]['url']
描述越详细,您就越有可能获得您或您的最终用户想要的结果。您可以探索DALL·E 预览应用程序中的示例以获得更多提示灵感。这是一个简单的例子:
迅速的 一代
一只白色的暹罗猫 图像生成测试版 - 图1
一只白色暹罗猫的特写工作室摄影肖像,它看起来好奇,背光的耳朵 图像生成测试版 - 图2

使用response_format参数,每个图像都可以作为 URL 或 Base64 数据返回。网址将在一个小时后过期。

编辑

图像编辑端点允许您通过上传遮罩来编辑和扩展图像。遮罩的透明区域指示应编辑图像的位置,提示应描述完整的新图像,而不仅仅是擦除区域。此端点可以启用类似我们 DALL·E 预览应用程序中的编辑器的体验。
  1. response = openai.Image.create_edit(
  2. image=open("sunlit_lounge.png", "rb"),
  3. mask=open("mask.png", "rb"),
  4. prompt="A sunlit indoor lounge area with a pool containing a flamingo",
  5. n=1,
  6. size="1024x1024"
  7. )
  8. image_url = response['data'][0]['url'] n=1, size="1024x1024" ) image_url = response['data'][0]['url']
图像 面具 输出
图像生成测试版 - 图3 图像生成测试版 - 图4 图像生成测试版 - 图5
上传的图片和蒙版必须都是小于4MB的正方形PNG图片,并且尺寸必须相同。生成输出时不使用遮罩的非透明区域,因此它们不一定需要像上面的示例那样与原始图像匹配。

变化

图像变体端点允许您生成给定图像的变体。
  1. response = openai.Image.create_variation(
  2. image=open("corgi_and_cat_paw.png", "rb"),
  3. n=1,
  4. size="1024x1024"
  5. )
  6. image_url = response['data'][0]['url']
图像 输出
图像生成测试版 - 图6 图像生成测试版 - 图7
与编辑端点类似,输入图像必须是大小小于 4MB 的方形 PNG 图像。

内容审核

提示和图像根据我们的内容政策进行过滤,当提示或图像被标记时返回错误。如果您对误报或相关问题有任何反馈,请通过我们的帮助中心联系我们。

特定语言提示

NODE.JS

使用内存图像数据

上面指南中的 Node.js 示例使用该fs模块从磁盘读取图像数据。在某些情况下,您可能会将图像数据保存在内存中。下面是一个使用存储在 Node.jsBuffer对象中的图像数据的 API 调用示例:
  1. // This is the Buffer object that contains your image data
  2. const buffer = [your image data];
  3. // Set a `name` that ends with .png so that the API knows it's a PNG image
  4. buffer.name = "image.png";
  5. const response = await openai.createImageVariation(
  6. buffer,
  7. 1,
  8. "1024x1024"
  9. );

使用打字稿

如果您使用的是 TypeScript,您可能会遇到一些图像文件参数的问题。下面是通过显式转换参数来解决类型不匹配的示例:
  1. // Cast the ReadStream to `any` to appease the TypeScript compiler
  2. const response = await openai.createImageVariation(
  3. fs.createReadStream("image.png") as any,
  4. 1,
  5. "1024x1024"
  6. );
这是内存中图像数据的类似示例:
  1. // This is the Buffer object that contains your image data
  2. const buffer: Buffer = [your image data];
  3. // Cast the buffer to `any` so that we can set the `name` property
  4. const file: any = buffer;
  5. // Set a `name` that ends with .png so that the API knows it's a PNG image
  6. file.name = "image.png";
  7. const response = await openai.createImageVariation(
  8. file,
  9. 1,
  10. "1024x1024"
  11. );

错误处理

API 请求可能会由于无效输入、速率限制或其他问题而返回错误。这些错误可以用一条语句来处理,错误的详细信息可以在or**<font style="color:rgb(53, 55, 64);">try...catch</font>**中找到:**<font style="color:rgb(53, 55, 64);">error.responseerror.message</font>** javascript 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); } } ## PYTHON ### 使用内存图像数据 上面指南中的 Python 示例使用该open函数从磁盘读取图像数据。在某些情况下,您可能会将图像数据保存在内存中。下面是一个使用存储在BytesIO对象中的图像数据的 API 调用示例:
  1. from io import BytesIO
  2. # This is the BytesIO object that contains your image data
  3. byte_stream: BytesIO = [your image data]
  4. byte_array = byte_stream.getvalue()
  5. response = openai.Image.create_variation(
  6. image=byte_array,
  7. n=1,
  8. size="1024x1024"
  9. )

图像数据操作

在将图像传递给 API 之前对图像执行操作可能很有用。PIL这是一个用于调整图像大小的示例:
  1. from io import BytesIO
  2. from PIL import Image
  3. # Read the image file from disk and resize it
  4. image = Image.open("image.png")
  5. width, height = 256, 256
  6. image = image.resize((width, height))
  7. # Convert the image to a BytesIO object
  8. byte_stream = BytesIO()
  9. image.save(byte_stream, format='PNG')
  10. byte_array = byte_stream.getvalue()
  11. response = openai.Image.create_variation(
  12. image=byte_array,
  13. n=1,
  14. size="1024x1024"
  15. )

错误处理

API 请求可能会由于无效输入、速率限制或其他问题而返回错误。这些错误可以用一个语句来处理**<font style="color:rgb(53, 55, 64);">try...except</font>**,错误的详细信息可以在**<font style="color:rgb(53, 55, 64);">e.error</font>**
  1. try:
  2. openai.Image.create_variation(
  3. open("image.png", "rb"),
  4. n=1,
  5. size="1024x1024"
  6. )
  7. print(response['data'][0]['url'])
  8. except openai.error.OpenAIError as e:
  9. print(e.http_status)
  10. print(e.error)