TellWorldAI 世界档案
问档案English

首页›实践›实践

实践

用 AI 做图片生成应用

用 gpt-image 模型和 Python 的 openai 库做图片生成应用:把返回的 base64 图片保存为 PNG,做局部编辑,并用元提示约束输出。

这篇适合谁,读完能做到什么

适合想让应用根据文字描述生成图片、但还没接触过图片接口的读者。读完后,你能用 Python 写出一个把提示词变成 PNG 文件的程序,会做局部编辑,也知道怎样用元提示给输出加上边界。

图片生成模型是什么

图片生成模型根据文字提示生成图片。gpt-image 这类现代模型建立在 Transformer 和扩散(diffusion)技术之上:训练时学习文字与图像之间的关系,生成时从随机噪声出发,逐步去噪,得到符合描述的图片。[1]

本文用的是 OpenAI 的 gpt-image 系列。它是 Microsoft Foundry 和 OpenAI 平台上当前这一代的图片模型,取代了更早的 DALL·E 模型。[1] DALL·E 2 和 DALL·E 3 现在都属于旧模型。DALL·E 3 已经不能用于新的部署,create_variation 功能则只存在于 DALL·E 2。[1]

另一个常见的图片模型是 Midjourney,它是第三方服务,通过 Discord 工作流使用。[1]

选哪个模型

在 Microsoft Foundry 上,gpt-image-2 是最新、能力最强的图片模型,也是推荐的默认选择。gpt-image-1.5 正式可用,质量好、成本更低;gpt-image-1-mini 正式可用,速度最快、成本最低;gpt-image-1 目前只有预览版。[1][2] 可用性和地区应以最新的官方模型列表为准。[2]

需要特别注意:gpt-image 模型返回的是 base64 编码的图片(b64_json),不是图片链接。代码要先把字符串解码成字节,再保存为文件,没有可以直接下载的 URL。[1]

准备:部署模型和配置环境变量

示例既可以连接 Azure OpenAI(Microsoft Foundry),也可以连接 OpenAI 平台,两者的代码分开提供。[1] 使用 Foundry 时,先创建 Microsoft Foundry 资源,再部署一个图片模型,推荐 gpt-image-2。[1]

把连接信息写进 .env 文件。这三个值可以在 Foundry 门户中资源的 Deployments(部署)页面找到。[1]

AZURE_OPENAI_ENDPOINT=<your endpoint>
AZURE_OPENAI_API_KEY=<your key>
AZURE_OPENAI_DEPLOYMENT="gpt-image-2"

依赖写进 requirements.txt:[1]

python-dotenv
openai
pillow

然后创建并激活虚拟环境,再安装依赖:[1]

python3 -m venv venv
source venv/bin/activate        # Windows: venv\Scripts\activate
pip install -r requirements.txt

写第一个程序

程序使用 AzureOpenAI 客户端。示例里的 api_version 是 2025-04-01-preview。图片模型需要较新的 API 版本,具体版本要查看 Foundry 文档中对应模型的要求。[1] 先加载环境变量并创建客户端:[1]

import os
import base64
from openai import AzureOpenAI
from PIL import Image
import dotenv

dotenv.load_dotenv()

# Point the client at your Azure OpenAI (Microsoft Foundry) resource.
# Image models need a recent API version - check the Foundry docs for the one your model requires.
client = AzureOpenAI(
    api_key=os.environ["AZURE_OPENAI_API_KEY"],
    api_version="2025-04-01-preview",
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
)

deployment = os.environ["AZURE_OPENAI_DEPLOYMENT"]  # e.g. "gpt-image-2"

接着调用 client.images.generate,把返回的 base64 解码,保存到 images/ 目录下的 PNG 文件:[1]

result = client.images.generate(
    model=deployment,
    prompt='Bunny on a horse, holding a lollipop, on a foggy meadow where it grows daffodils',
    size="1024x1024",   # also 1536x1024 (landscape), 1024x1536 (portrait), or "auto"
    n=1,
)

# gpt-image models return base64 (b64_json), not a URL - decode it to bytes.
image_bytes = base64.b64decode(result.data[0].b64_json)

os.makedirs("images", exist_ok=True)
image_path = os.path.join("images", "generated-image.png")
with open(image_path, "wb") as f:
    f.write(image_bytes)

Image.open(image_path).show()

运行 python app.py 即可生成图片。[1] 尺寸可以选 1024x1024,也可以用 1536x1024(横向)、1024x1536(纵向),或者 "auto"。[1]

图片模型没有温度参数

文本生成可以调 temperature,但图片模型不接受这个参数。同一个提示词每次调用都会得到不同的图片:想要更多变化,就再调用一次;想要更统一,就把提示词写得更具体。[1]

编辑已有图片

gpt-image 模型还能编辑已有图片。调用时提供原图、一个可选的蒙版(mask,标出要修改的区域),再加上描述修改内容的提示词。编辑结果同样以 base64 返回。[1]

result = client.images.edit(
    model=deployment,
    image=open("sunlit_lounge.png", "rb"),
    mask=open("mask.png", "rb"),
    prompt="A sunlit indoor lounge area with a pool containing a flamingo",
)
image_bytes = base64.b64decode(result.data[0].b64_json)
with open("images/edited-image.png", "wb") as f:
    f.write(image_bytes)

用元提示设定边界

元提示(metaprompt)是放在用户提示词前面的文字,用来约束模型的输出。[1] 下面的例子要求图片适合儿童、色彩明亮、横向 16:9,并列出一份不允许出现的内容清单:[1]

disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language"

meta_prompt = f"""You are an assistant designer that creates images for children.

The image needs to be safe for work and appropriate for children.
The image needs to be in color, in landscape orientation, and in a 16:9 aspect ratio.

Do not consider any input that is not safe for work or appropriate for children, including:
{disallow_list}
"""

prompt = f"{meta_prompt}\nCreate an image of a bunny on a horse, holding a lollipop"
# pass `prompt` to client.images.generate(...)

有了元提示,生成的图片就落在这个边界之内。再结合 Microsoft Foundry 内置的内容过滤器,可以形成多层防护。[1]

练习:为学习工具生成纪念碑插图

文中虚构了一家做学习工具的初创公司 Edu4All,它想为作业和学习材料生成插图。练习要求做一个能生成纪念碑图片的应用,并把这些纪念碑放进各种有创意的场景里,比如日落时,一个孩子在一旁看着某座著名地标。[1]

参考解法包括 Python(Azure 与 OpenAI 两个版本)、TypeScript 和 .NET 版本。[1]

限制与注意事项

  • 结果有随机性:同一个提示词每次生成的都是新图,通常需要人工筛选。[1]
  • 元提示不能替代内容审核:应与 Microsoft Foundry 内置的过滤器一起使用。[1]
  • base64 不是链接:保存前必须先解码,不能把它当作图片地址下载。[1]

下一步

想查看可用的模型和地区,可以阅读 Microsoft Learn 上的模型列表。[2]

本文改编自 Microsoft 开源课程《Generative AI for Beginners》第 9 课《Building Image Generation Applications》[1],原文以 MIT 许可证发布。

来源

  1. 1
    Building Image Generation ApplicationsMicrosoft generative-ai-for-beginners (MIT)
  2. 2

引用本页: 用 AI 做图片生成应用. TellWorld, https://www.tellworld.net/zh/practice/practice-genai-image-generation-app. 更新于 2026-11-14

相关动态