注意:本文将教你如何使用OpenAI的DALL·E图像API,但请确保你已经获得了相应的API访问权限。
你是否曾经想过能够通过简单的文字描述生成令人惊艳的图像?OpenAI的DALL·E图像API为你提供了这个机会。本文将向你展示如何使用DALL·E API的三个关键端点:生成、编辑和变化,以及一些有用的提示和技巧。
开场故事
想象一下,你是一名创意设计师,你的任务是为一家时尚杂志创建独特的封面图像。你需要一种方法来将你的创意快速转化为视觉艺术,而不需要繁琐的图像编辑工作。幸运的是,有一种新颖的技术可以帮助你实现这一目标,那就是使用DALL·E API。在本文中,我们将探讨如何使用这个API来生成、编辑和变换图像,让你的创意得以充分展示。
准备工作
在开始之前,你需要完成一些准备工作。
导入必要的库
首先,导入你需要的Python库。这些库将帮助你与DALL·E API进行交互,并进行图像处理。
import openai # OpenAI Python库,用于进行API调用
import requests # 用于下载图像
import os # 用于访问文件路径
from PIL import Image # 用于显示和编辑图像
设置API密钥
在继续之前,确保你已经获取了OpenAI的API密钥,并将其设置为环境变量。你可以在终端中运行以下命令来设置API密钥:
export OPENAI_API_KEY="你的API密钥"
设置保存图像的目录
为了保存生成的图像,创建一个目录,以便后续使用。你可以使用以下代码来创建目录:
# 设置保存DALL·E图像的目录
image_dir_name = "images"
image_dir = os.path.join(os.curdir, image_dir_name)
# 如果目录不存在,则创建它
if not os.path.isdir(image_dir):
os.mkdir(image_dir)
使用DALL·E API
现在,让我们深入了解如何使用DALL·E API的不同端点来生成、编辑和变换图像。
生成图像
生成端点用于根据文本描述生成图像。你只需提供一个文本描述,DALL·E就会尝试创建相应的图像。
必要输入:
- prompt(str):对所需图像的文本描述。最大长度为1000个字符。
可选输入:
- n(int):要生成的图像数量。必须介于1和10之间,默认为1。
- size(str):生成图像的尺寸。必须是以下尺寸之一:"256x256"、"512x512"或"1024x1024"。较小的图像生成速度更快,默认为"1024x1024"。
- response_format(str):生成的图像返回格式。必须是"url"或"b64_json"之一,默认为"url"。
- user(str):代表你的最终用户的唯一标识符,有助于OpenAI监测和检测滥用。了解更多信息。
让我们看看如何使用DALL·E API生成图像的示例:
# 设置文本描述
prompt = "一个赛博朋克的猴子黑客,梦想着一堆美味的香蕉,数字艺术"
# 调用OpenAI API
generation_response = openai.Image.create(
prompt=prompt,
n=1,
size="1024x1024",
response_format="url",
)
# 打印响应
print(generation_response)
上述代码将返回生成的图像的URL。你可以将这个URL用于下载图像,如下所示:
# 保存图像
generated_image_name = "生成的图像.png" # 任何你喜欢的名称,文件类型应为.png
generated_image_filepath = os.path.join(image_dir, generated_image_name)
generated_image_url = generation_response["data"][0]["url"] # 从响应中提取图像URL
generated_image = requests.get(generated_image_url).content # 下载图像
with open(generated_image_filepath, "wb") as image_file:
image_file.write(generated_image) # 将图像写入文件
接下来,我们可以使用PIL库来显示生成的图像:
# 显示生成的图像
print(generated_image_filepath)
Image.open(generated_image_filepath)
变换图像
变换端点用于生成与输入图像相似的新图像(变体)。
必要输入:
- image(str):要用作变体基础的图像。必须是有效的PNG文件,小于4MB,并且是正方形。
可选输入:
- n(int):要生成的图像数量。必须介于1和10之间,默认为1。
- size(str):生成图像的尺寸。必须是以下尺寸之一:"256x256"、"512x512"或"1024x1024"。较小的图像生成速度更快,默认为"1024x1024"。
- response_format(str):生成的图像返回格式。必须是"url"或"b64_json"之一,默认为"url"。
- user(str):代表你的最终用户的唯一标识符,
有助于OpenAI监测和检测滥用。了解更多信息。
以下是如何生成图像变体的示例:
# 调用OpenAI API,使用`create_variation`而不是`create`
variation_response = openai.Image.create_variation(
image=generated_image, # 从上面生成的图像获取
n=2,
size="1024x1024",
response_format="url",
)
# 打印响应
print(variation_response)
类似于生成图像,我们可以将变体的URL用于下载图像,如下所示:
# 保存变体图像
variation_urls = [datum["url"] for datum in variation_response["data"]] # 提取URL
variation_images = [requests.get(url).content for url in variation_urls] # 下载图像
variation_image_names = [f"变体图像_{i}.png" for i in range(len(variation_images))] # 创建名称
variation_image_filepaths = [os.path.join(image_dir, name) for name in variation_image_names] # 创建文件路径
for image, filepath in zip(variation_images, variation_image_filepaths): # 遍历变体
with open(filepath, "wb") as image_file: # 打开文件
image_file.write(image) # 将图像写入文件
接下来,我们可以使用PIL库来显示生成的原始图像和变体图像:
# 显示原始图像
print(generated_image_filepath)
Image.open(generated_image_filepath)
# 显示新的变体图像
for variation_image_filepaths in variation_image_filepaths:
print(variation_image_filepaths)
Image.open(variation_image_filepaths)
编辑图像
编辑端点使用DALL·E生成现有图像的指定部分。编辑需要三个输入:要编辑的图像、指定要重新生成的部分的蒙版和描述所需图像的提示。
必要输入:
- image(str):要编辑的图像。必须是有效的PNG文件,小于4MB,并且是正方形。
- mask(str):另一个图像,其完全透明区域(例如,alpha为零的区域)指示图像应该进行编辑。必须是有效的PNG文件,小于4MB,并且与图像具有相同的尺寸。
- prompt(str):对所需图像的文本描述。最大长度为1000个字符。
可选输入:
- n(int):要生成的图像数量。必须介于1和10之间,默认为1。
- size(str):生成图像的尺寸。必须是以下尺寸之一:"256x256"、"512x512"或"1024x1024"。较小的图像生成速度更快,默认为"1024x1024"。
- response_format(str):生成的图像返回格式。必须是"url"或"b64_json"之一,默认为"url"。
- user(str):代表你的最终用户的唯一标识符,有助于OpenAI监测和检测滥用。了解更多信息。
编辑需要一个“蒙版”,以指定图像的哪个部分需要重新生成。蒙版是一个图像,其中alpha值为0(透明)的任何像素都将重新生成。下面的代码创建一个1024x1024的蒙版,其中底半部分是透明的:
# 创建一个蒙版
width = 1024
height = 1024
mask = Image.new("RGBA", (width, height), (0, 0, 0, 1)) # 创建一个不透明的图像蒙版
# 将底半部分设置为透明
for x in range(width):
for y in range(height // 2, height): # 仅循环遍历蒙版的底半部分
# 将alpha(A)设置为零以使像素变为透明
alpha = 0
mask.putpixel((x, y), (0, 0, 0, alpha))
# 保存蒙版
mask_name = "底半部分蒙版.png"
mask_filepath = os.path.join(image_dir, mask_name)
mask.save(mask_filepath)
现在,我们可以使用这个蒙版来编辑图像,生成一些编辑的示例:
# 编辑图像
# 调用OpenAI API
edit_response = openai.Image.create_edit(
image=open(generated_image_filepath, "rb"), # 来自生成部分的图像
mask=open(mask_filepath, "rb"), # 来自上面的蒙版
prompt=prompt, # 来自生成部分的文本描述
n=1,
size="1024x1024",
response_format="url",
)
# 打印响应
print(edit_response)
与前面的示例一样,我们可以将编辑的图像的URL用于下载图像,如下所示:
# 保存图像
edited_image_name = "编辑后的图像.png" # 任何你喜欢的名称,文件类型应为.png
edited_image_filepath = os.path.join(image_dir, edited_image_name)
edited_image_url = edit_response["data"][0]["url"] # 从响应中提取图像URL
edited_image = requests.get(edited_image_url).content # 下载图像
with open(edited_image_filepath, "wb") as image_file:
image_file.write(edited_image) # 将图像写入文件
现在,我们可以使用PIL库来显示原始图像和编辑后的图像:
# 显示原始图像
print(generated_image_filepath)
Image.open(generated_image_filepath)
# 显示编辑后的图像
print(edited_image_filepath)
Image.open(edited_image_filepath)
小贴士
在使用DALL·E API时,以下是一些有用的小贴士:
- 尝试不同的文本描述:通过尝试不同的文本描述来获得不同风格和主题的图像。
- **实验编辑
**:尝试使用不同的蒙版和文本描述来编辑图像,以获得不同的效果。
- 注意图像尺寸:选择适合你项目需要的图像尺寸,较小的图像生成速度更快。
- 保留API密钥安全:确保不分享你的API密钥,以防止滥用。
现在,你已经了解如何使用DALL·E API生成、编辑和变换图像,你可以尝试将这些技巧应用到你的创意项目中,为你的设计工作增添一些魔法。
结论
DALL·E API为创意设计师和艺术家提供了一个令人兴奋的机会,可以通过简单的文本描述来生成、编辑和变换惊艳的图像。无论你是在制作杂志封面、广告宣传、艺术作品还是任何其他创意项目,DALL·E API都可以成为你的得力助手。
现在,赶快尝试一下这个令人着迷的技术,看看它如何为你的创意世界带来新的可能性!