唠嗑
又好久好久没写博客了,我又忘记怎么排版了,笑死,调用DALL-E画图倒是很简单,也不用多说,不过目前DALL-E还不支持图生图,我平常都是放一张图片给gpt-4o分析后,再让它重新画的,能有点相似度,这里只放怎么调用DALL-E。
通过调用openai库来实现
代码
import openai
import requests
import os
from datetime import datetime
# 设置 API 密钥和基础 URL
API_KEY = ''
API_BASE = ''
# 配置 OpenAI
openai.api_key = API_KEY
openai.api_base = API_BASE
def generate_image(prompt, size="1024x1024", quality="standard", n=1):
"""
使用 DALL-E 3 生成图像
:param prompt: 图像描述提示
:param size: 图像尺寸 ("1024x1024", "1792x1024", or "1024x1792")
:param quality: 图像质量 ("standard" or "hd")
:param n: 生成图像的数量
:return: 生成的图像文件路径列表
"""
try:
# 获取当前脚本所在目录并创建输出目录
current_dir = os.path.dirname(os.path.abspath(__file__))
output_dir = os.path.join(current_dir, 'generated_images')
os.makedirs(output_dir, exist_ok=True)
# 调用 DALL-E 3 API
response = openai.Image.create(
model="dall-e-3", # 使用 DALL-E 3 模型
prompt=prompt,
size=size,
quality=quality,
n=n
)
print("数据结构:", response)
# 保存生成的图像
image_files = []
for i, image_data in enumerate(response['data']):
image_url = image_data['url']
# 下载图像
image_response = requests.get(image_url)
if image_response.status_code == 200:
# 生成唯一的文件名
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"dalle3_image_{timestamp}_{i}.png"
filepath = os.path.join(output_dir, filename)
# 保存图像
with open(filepath, 'wb') as f:
f.write(image_response.content)
image_files.append(filepath)
print(f"图像已保存: {filepath}")
return image_files
except Exception as e:
print(f"生成图像时发生错误: {str(e)}")
return None
def main():
print("欢迎使用 DALL-E 3 图像生成器!")
print("可用的图像尺寸: 1024x1024, 1792x1024, 1024x1792")
print("图像质量选项: standard, hd")
prompt = input("\n请输入图像描述(输入 'exit' 退出): ")
if prompt.lower() == 'exit':
return
size = input("请选择图像尺寸 (默认 1024x1024): ") or "1024x1024"
quality = input("请选择图像质量 (默认 standard): ") or "standard"
n = int(input("生成图像数量 (默认 1): ") or "1")
try:
image_files = generate_image(prompt, size, quality, n)
if image_files:
print("\n成功生成以下图像:")
for file in image_files:
print(f"- {file}")
else:
print("生成图像失败")
except Exception as e:
print(f"发生错误: {str(e)}")
if __name__ == "__main__":
main()
调用API实现
代码
import requests
import os
from datetime import datetime
# 设置 API 密钥和基础 URL
API_KEY = ''
API_BASE = ''
def generate_image(prompt, size="1024x1024", quality="standard", n=1):
"""
使用 DALL-E 3 生成图像
:param prompt: 图像描述提示
:param size: 图像尺寸 ("1024x1024", "1792x1024", or "1024x1792")
:param quality: 图像质量 ("standard" or "hd")
:param n: 生成图像的数量
:return: 生成的图像文件路径列表
"""
try:
# 获取当前脚本所在目录并创建输出目录
current_dir = os.path.dirname(os.path.abspath(__file__))
output_dir = os.path.join(current_dir, 'generated_images')
os.makedirs(output_dir, exist_ok=True)
# 调用 DALL-E 3 API
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
payload = {
"model": "dall-e-3", # 使用的模型
"prompt": prompt, # 提示词
"size": size, # 尺寸
"quality": quality, # 生成的质量
"n": n # 生成的图像数量
}
response = requests.post(
f"{API_BASE}/images/generations",
headers=headers,
json=payload
)
print("API响应:", response)
if response.status_code != 200:
print(f"API错误: {response.status_code}")
print(f"错误信息: {response.text}")
return None
response_data = response.json()
print("数据结构:", response_data)
# 保存生成的图像
image_files = []
for i, image_data in enumerate(response_data['data']):
image_url = image_data['url']
# 下载图像
image_response = requests.get(image_url)
if image_response.status_code == 200:
# 生成唯一的文件名
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"dalle3_image_{timestamp}_{i}.png"
filepath = os.path.join(output_dir, filename)
# 保存图像
with open(filepath, 'wb') as f:
f.write(image_response.content)
image_files.append(filepath)
print(f"图像已保存: {filepath}")
return image_files
except Exception as e:
print(f"生成图像时发生错误: {str(e)}")
return None
def main():
print("欢迎使用 DALL-E 3 图像生成器!")
print("可用的图像尺寸: 1024x1024, 1792x1024, 1024x1792")
print("图像质量选项: standard, hd")
prompt = input("\n请输入图像描述(输入 'exit' 退出): ")
if prompt.lower() == 'exit':
return
size = input("请选择图像尺寸 (默认 1024x1024): ") or "1024x1024"
quality = input("请选择图像质量 (默认 standard): ") or "standard"
n = int(input("生成图像数量 (默认 1): ") or "1")
try:
image_files = generate_image(prompt, size, quality, n)
if image_files:
print("\n成功生成以下图像:")
for file in image_files:
print(f"- {file}")
else:
print("生成图像失败")
except Exception as e:
print(f"发生错误: {str(e)}")
if __name__ == "__main__":
main()
效果
笑死了这个出图,它可能认为兔子不应该追着老虎?
响应数据结构
{
# 创建时间戳(Unix时间戳格式)
'created': 1731397770,
# 生成的图像数据数组
'data': [
{
# DALL-E可能对你的提示词进行修改后的版本
'revised_prompt': 'A cute rabbit is chasing a tiger.',
# 生成图像的临时URL(有效期限制)
'url': 'https://dalleproduse.blob.core.windows.net/private/images/31e88f89-c74d-4080-ab7b-f385a3ec8ab9/generated_00.png?se=2024-11-13T07%3A49%3A39Z&sig=2yU9N9sULo0v2tGTAIOxWWN9fqiDXrn7fkJqg8nQ3CI%3D&ske=2024-11-19T06%3A04%3A27Z&skoid=09ba021e-c417-441c-b203-c81e5dcd7b7f&sks=b&skt=2024-11-12T06%3A04%3A27Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02'
}
]
}
再跑了一张