GPT-Image-1 API 配置
新的 GPT 图像模型受保护,这意味着使用它需要进行额外的验证。本节将介绍如何设置 API。如果您已经有 API 密钥,可以跳过第一步。
步骤 1:生成 API 密钥
第一步是生成 API 密钥。我们可以登录其平台并进入 API keys 页面。然后点击“Create new secret key”按钮。
生成密钥后,新建一个名为 .env 的文件,并按如下格式粘贴:
OPENAI_API_KEY=<paste_your_api_key_here>
步骤 2:验证组织
与其他 OpenAI 模型的一个重大区别在于,使用 GPT 图像 API 需要验证您的组织。原因在于 GPT-Image-1 能生成逼真且细节丰富的图像,这引发了潜在滥用的担忧,例如制作深度伪造或不当内容。通过验证组织,OpenAI 能更好地监控使用情况并执行其安全政策。
即使您没有公司,也可以验证您的组织。但请注意,此过程需要提供您的政府签发身份证件并完成面部验证。
要进行验证,请前往 OpenAI API 平台的 general 选项卡,并点击“Verifications”部分下的按钮。
该流程由第三方执行,包含以下步骤:
- 上传身份证件的图像。
- 使用手机摄像头验证您的身份与所提供证件一致。
整个流程只需几分钟完成,随后大约 15 分钟即可处理完毕。
Python 环境设置
在本教程中,我们将安装以下 Python 包:
openai:官方 OpenAI 包,使我们能够与其 API 交互。dotenv:用于安全加载我们上面创建的.env文件中的 API 密钥。
使用以下命令安装:
pip install openai dotenv
用 GPT-Image-1 生成第一张图
让我们看看如何用 gpt-image-1 生成图像。首先在与 .env 文件相同的文件夹中新建一个 Python 文件,例如 generate_image.py。
然后导入所需的包:
# Import the packages
from openai import OpenAI
from dotenv import load_dotenv
import os
import base64
import time
请注意,os 和 base64 是 Python 内置包,无需安装。
接下来,加载 API 密钥并初始化 OpenAI 客户端:
# Load the API key
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
# Initialize the OpenAI client
client = OpenAI(api_key=api_key)
随后,使用内置函数 input() 让用户输入文字提示,并向 API 发送图像生成请求:
# Ask the user to input a prompt in the terminal
print("What do you want to generate?")
prompt = input("> ")
print("Generating image...")
# Send the prompt to the API
img = client.images.generate(
model="gpt-image-1",
prompt=prompt,
background="auto",
n=1,
quality="high",
size="1024x1024",
output_format="png",
moderation="auto",
)
最后,将生成的图像保存为文件:
# Save the image into a file
image_bytes = base64.b64decode(img.data[0].b64_json)
with open(f"output_{int(time.time())}.png", "wb") as f:
f.write(image_bytes)
完整脚本见 此处。运行脚本的命令:
python generate_image.py
下面是一个示例及其输出:

GPT-Image 1 参数
本节介绍 gpt-image-1 模型最相关的参数:
prompt:描述我们希望模型生成何种图像的文本指令。background:图像背景类型。必须为"transparent"、"opaque"或"auto"之一。默认值为"auto",模型会根据内容决定最佳背景类型。请注意 JPEG 不支持透明背景。n:生成的图像数量。必须为 1 到 10 之间的数字。quality:生成图像的质量。必须为"high"、"medium"或"low"之一,默认"high"。size:图像像素尺寸。必须为"1024x1024"(正方形)、"1536x1024"(横向)、"1024x1536"(纵向)之一。output_format:图像格式。必须为"png"、"jpeg"或"webp"之一。默认"png"。moderation:内容审核级别。可为较不严格的"low"或默认的"auto"。
我们已覆盖 gpt-image-1 模型最重要的参数。更多详情及完整参数列表,请查看 官方 API 文档。
quality 参数的影响
下面是使用相同提示、不同质量生成的图像并排对比:

可以看到第一只猫(最低质量)在眼睛周围有些伪影,且随着质量提升,图像显著更趋近真实。
再看一个卡通风格输出的例子:

在这种情况下,同样能看到质量越高,图像越精致。不过在我看来,对于本就不追求写实的内容,这点的重要性会低一些。
请记住,质量越高,成本和计算时间也越高,因此根据使用场景找到合适的权衡很重要。建议从低到高尝试参数,找出在各个用例中能给出可接受结果的最低值。
background 参数
在我的实验中,我发现模型大多忽略了该参数。下面是我在并排示例中同时变化 background 参数与提示中的透明度指令的效果:

在第一个例子中,透明度参数被忽略。第二个例子里,我把透明度指令加入提示中,效果稍好。最后一个例子里,我请求不透明背景,但在提示中说明我想要贴纸,结果得到的是透明背景。
我仍建议使用该参数与您的期望相匹配,但务必在提示中同时明确所需结果以加强意图。
使用 GPT-Image-1 编辑图像
正如在引言中所述,GPT-Image-1 最令人兴奋的部分是其图像编辑能力。我们先学习如何让它编辑一张图片,然后再探索几个用例。
要进行编辑,多数代码都可复用。不同之处在于,不再使用 client.images.generate(),而是使用 client.images.edit() 函数。
示例如下:
img = client.images.edit(
model="gpt-image-1",
image=[
open("my-image.jpg", "rb"),
],
prompt=prompt,
n=1,
quality="high",
size="1024x1536",
)
新增的参数是 image。它是用于编辑的输入图像列表。此处我们只提供了一张图片 my-image.jpg,位于与脚本相同的文件夹中。
下面是用 GPT Image 1 编辑我一张照片的示例:

请注意,由于原图是纵向比例,我使用了纵向尺寸 1024x1536。不过,这与原图比例并不一致。即使在编辑模式下,模型也只能输出上述三种尺寸的图像。
完整编辑脚本见 此处。
使用遮罩(mask)
编辑模式提供了 mask 参数,我们可以用它指定需要编辑的区域。遮罩必须是大小不超过 4 MB、与原图大小一致的 PNG 图像。透明度 100% 的区域对应 GPT Image 1 被允许编辑的区域。
遮罩的提供方式与图像类似,但这里不是列表:
img = client.images.edit(
model="gpt-image-1",
image=[
open(sys.argv[1], "rb"),
],
# We provide the mask like this
mask=open("mask.png", "rb"),
prompt=prompt,
n=1,
quality="high",
size="1536x1024",
)
不过,在我的实验中效果并不理想,我也在网上看到有类似问题的反馈。
示例如下:

我也尝试用它在特定位置添加元素,但效果并不稳定。与在图像生成时使用 background 参数类似,我发现直接在提示中描述想要的内容通常效果更好。
使用多张图片
该模型可以一次处理并组合多张图片。下面的例子中,我们用它来创建一张营销海报,将三种饮品的单独图片合成:

我们在 image 参数中以列表形式提供三张图片,如下:
prompt = """
Create a vibrant and eye-catching marketing poster to
promote the cold drinks offerings at our coffee shop.
"""
img = client.images.edit(
model="gpt-image-1",
# We can provide multiple images at once
image=[
open("latte.png", "rb"),
open("americano.png", "rb"),
open("icetea.png", "rb"),
],
prompt=prompt,
size="1536x1024",
)
效果如下:

GPT-Image-1 计费
生成图像的计费基于以下因素:
- 文本提示中的 token 数量。
- 输入图像中的 token 数量。
- 输出图像中的 token 数量。

有时我们很难理解这些成本的含义,因为我们并不知道一张图像包含多少 token。
由于输出图像的尺寸是已知的,我们也就知道每种尺寸所需的 token 数量,因此可以给出输出图像 token 价格的精确值(这通常是最昂贵的部分):

价格取决于图像质量与尺寸。更多详情请查看 GPT Image 1 价格页面。
当我们生成图像时,API 会返回其使用的 token 数量,因此可以结合上述信息精确得知成本。
我们可以打印结果中的 usage 字段来显示使用的 token 数量:
img = client.images.generate(
model="gpt-image-1",
prompt=prompt,
background="transparent",
n=1,
quality="medium",
size="1024x1024",
moderation="auto",
output_format="png",
)
# Add this to see the usage
print("Prompt tokens:", img.usage.input_tokens_details.text_tokens)
print("Input images tokens:", img.usage.input_tokens_details.image_tokens)
print("Output image tokens:", img.usage.output_tokens)
输出:
Prompt tokens: 8
Input images tokens: 0
Output image tokens: 272
结语
尽管 API 存在一些不足,比如遮罩与透明度的可靠性不够高,但该模型能够高精度地执行提示中给出的指令。
我认为这个模型为围绕其构建应用带来了许多可能性。在本教程中,我们学习了其基本用法。以下是一些您可以在此基础上继续探索的想法:
- 将手机拍摄的食物照高效转化为可用于餐厅菜单的精美美食摄影。
- 基于好友照片或自拍,创建可在聊天应用中使用的多种情绪贴纸包。
- 根据一系列场景描述,生成对应的连环漫画分镜。

几周前,ChatGPT 凭借其全新的图像生成模型在网络上迅速走红。这款模型是我迄今为止见过最出色的。它之所以与众不同,关键在于其图像编辑能力。它的准确度极高,让把想象变成现实变得异常轻松。其他模型也能做到,但准确度不在一个量级。
在界面中生成图像非常简单,我们只需提供一段文字提示即可。不过,作为程序员,我一直期待它登陆 API,这样我就能以编程方式与之交互。现在这一天终于到来,我写下这篇博客,教您如何用 Python 使用它。
如果您只想了解如何在聊天界面中使用它,我之前写过这篇GPT-4o 图像生成指南,其中包含八个实用示例。您也可以查看我们更新的文章,介绍使用 GPT-Image-1.5 模型的全新 ChatGPT Images。