我们已经领略了 AI 在文本生成、代码编写和知识问答方面的强大能力。但 AI 的创造力远不止于此,它在视觉艺术领域的表现同样令人惊叹。DALL-E 3 就是其中的佼佼者,它能将最天马行空的文字描述,转化为高质量的图像。
今天,我们就将以开发者的视角,探索如何将这种强大的能力集成到我们自己的程序中。
目标:做一个简单的AI绘画工具
我们的目标分为两步:
- 编写一个 Python 脚本,它能接收一段文字描述,调用 DALL-E 3 的 API 生成图片,并保存在本地。
- 使用
Gradio
库,为这个脚本套上一个简单的 Web 界面,让不写代码的人也能轻松使用。
第一步:获取你的“画笔”—— OpenAI API 密钥
要使用 DALL-E 3 API,你首先需要一个 OpenAI 的 API 密钥。
- 访问 platform.openai.com。
- 登录后,在左侧菜单中找到
API keys
页面。 - 点击
Create new secret key
,创建一个新的密钥并妥善保管。
安全提示:API 密钥非常重要,不要将它硬编码在代码中或提交到公共代码库。最佳实践是使用环境变量来管理它。
第二步:编写核心脚本
现在,让我们开始写代码,实现最核心的图像生成功能。
-
安装依赖库:我们需要
openai
库来与API交互,以及requests
库来下载生成的图片。pip install openai requests
-
创建主脚本
image_generator.py
:# image_generator.py import os import requests from openai import OpenAI # 最佳实践:从环境变量中读取 API 密钥 # 在终端中设置: export OPENAI_API_KEY='your-key-here' client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY")) def generate_and_save_image(prompt, filename="generated_image.png"): """接收文本提示,生成并保存图片""" print(f"正在根据提示生成图片: {prompt}") try: # 1. 调用 DALL-E 3 API response = client.images.generate( model="dall-e-3", prompt=prompt, size="1024x1024", # 可选尺寸: 1024x1024, 1024x1792, 1792x1024 quality="standard", # 可选质量: standard, hd n=1, # 生成图片的数量 ) # 2. 获取图片 URL image_url = response.data[0].url print(f"图片生成成功,URL: {image_url}") # 3. 下载图片 image_response = requests.get(image_url) image_response.raise_for_status() # 如果请求失败则抛出异常 # 4. 保存图片到本地 with open(filename, 'wb') as f: f.write(image_response.content) print(f"图片已成功保存至: {filename}") return filename except Exception as e: print(f"生成图片时发生错误: {e}") return None # --- 测试代码 --- if __name__ == "__main__": test_prompt = "一只可爱的赛博朋克风格的猫,戴着墨镜,坐在电脑前" generate_and_save_image(test_prompt)
现在,在你的终端设置好 OPENAI_API_KEY
环境变量后,直接运行 python image_generator.py
,稍等片刻,一张赛博朋克猫的图片就会出现在你的文件夹里了!
第三步:套上 Web UI 外壳
虽然命令行很酷,但一个图形界面显然更受欢迎。Gradio
是一个神奇的库,它能用最少的代码为你的 Python 函数生成一个漂亮的 Web UI。
-
安装 Gradio:
pip install gradio
-
创建应用脚本
app.py
:# app.py import gradio as gr from image_generator import generate_and_save_image # 导入我们刚才的函数 def gradio_interface(text_prompt): """Gradio 的接口函数""" if not text_prompt: return None # 如果输入为空,则不返回任何内容 # 为每次生成创建一个唯一的文件名,避免覆盖 output_filename = f"output_{hash(text_prompt)}.png" # 调用核心逻辑 saved_image_path = generate_and_save_image(text_prompt, filename=output_filename) return saved_image_path # 创建 Gradio 界面 iface = gr.Interface( fn=gradio_interface, inputs=gr.Textbox(lines=2, placeholder="在这里输入你的创意,比如:一只宇航员水獭在月球上漂浮..."), outputs="image", title="AI 绘画小作坊", description="输入一段文字,让 DALL-E 3 为你绘制独一无二的艺术作品。", allow_flagging="never" ) # 启动应用 if __name__ == "__main__": iface.launch()
第四步:启动你的AI绘画网站
在终端中运行 python app.py
。你会看到类似下面的输出:
Running on local URL: http://127.0.0.1:7860
用浏览器打开这个地址,一个简洁的 AI 绘画网站就展现在你眼前了。在输入框里尽情发挥你的想象力吧!
结语
我们只用了几十行 Python 代码,就完成了一个功能完整的 AI 绘画工具。这充分展示了将强大的 AI API 与简单的 UI 框架相结合所能爆发出的巨大潜力。
你可以基于这个项目进行各种扩展,比如:
- 添加更多的配置选项(图片尺寸、风格等)。
- 创建一个图库来展示所有生成过的图片。
- 将它部署到云服务器,让你的朋友也能一起玩。
技术的魅力就在于此,它给了我们创造的工具。现在,轮到你来创造了。
...