GPT 编图格式
GPT 编图格式
Section titled “GPT 编图格式”本页总览
📝 AI绘画模型简介
Section titled “📝 AI绘画模型简介”- gpt-4o-image gpt-4o-image-vip 这两个模型是ChatGPT新GPT-4o图像功能。OpenAI API模型 gpt-image-1 提供多种强大的图像生成模型,可以根据自然语言描述创建、可以对话编辑和修改图像。
💡 Python请求示例
Section titled “💡 Python请求示例”图片编辑示例(一) ✅
Section titled “图片编辑示例(一) ✅”import http.clientimport jsonfrom urllib.parse import urlparse # 用于解析URL
# 1. 配置参数 (直接在代码中加入密钥和接口地址)# ==============================================================================# 请将 "YOUR_ACTUAL_API_KEY" 替换为您的真实API密钥。API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 替换为您的真实密钥
# 请将 "your_api_provider.com" 替换为实际的API主机名。API_BASE_URL_CONFIG = "https://sg.4All API.com" # 示例,替换为您的接口基础URL
API_PATH_CONFIG = "/v1/chat/completions" # API的具体路径
MODEL = "gpt-image-1" # 您指定的模型,例如 gpt-4o-image, gpt-4o-image-vip, gpt-image-1, dall-e-3
# 图像编辑的参数PROMPT_TEXT = "修改这个图片,让它看起来更卡通化,色彩更鲜艳。" # 修改为您想要的编辑指令IMAGE_URL_TO_EDIT = "https://github.com/dianping/cat/raw/master/cat-home/src/main/webapp/images/logo/cat_logo03.png"# ==============================================================================
def call_image_api(api_key, base_url_config, path_config, model, prompt_text, image_url): """ 调用图像处理API。
参数: api_key (str): API密钥。 base_url_config (str): API的基础URL或主机名。 path_config (str): API的路径。 model (str): 使用的模型名称。 prompt_text (str): 描述操作的文本提示。 image_url (str): 要处理的图像的URL。
返回: dict or None: 解析后的JSON响应,如果失败则返回None。 """ parsed_url = urlparse(base_url_config) host = parsed_url.netloc if parsed_url.netloc else parsed_url.path # 如果没有scheme,netloc为空,path为主机名 scheme = parsed_url.scheme if parsed_url.scheme else "https" # 默认使用 https
if not host: print(f"错误:无法从 '{base_url_config}' 解析主机名。") return None
print(f"准备连接到: {scheme}://{host}{path_config}")
# 构建请求的payload payload_dict = { "model": model, "stream": False, # 对于图像编辑或生成,通常不需要流式响应 "messages": [ { "role": "user", "content": [ { "type": "text", "text": prompt_text }, { "type": "image_url", "image_url": { "url": image_url } } ] } ] # 根据您的API文档,可能还需要其他参数,例如 max_tokens, temperature等。 # 如果API是用于生成而非编辑,payload结构可能不同(例如直接使用 "prompt" 而非 "messages") } payload_json = json.dumps(payload_dict)
# 设置请求头 headers = { 'Accept': 'application/json', # 通常API会返回JSON 'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json' }
conn = None try: if scheme == "https": conn = http.client.HTTPSConnection(host) elif scheme == "http": conn = http.client.HTTPConnection(host) else: print(f"错误: 不支持的协议方案 '{scheme}'。请使用 'http' 或 'https'。") return None
print(f"发送请求到 POST {path_config}...") # print(f"Payload: {payload_json}") # 调试时可以取消注释打印Payload conn.request("POST", path_config, payload_json, headers)
res = conn.getresponse() response_status = res.status response_reason = res.reason response_data_bytes = res.read()
print(f"收到响应: {response_status} {response_reason}")
if response_status == 200: try: decoded_data = response_data_bytes.decode("utf-8") json_response = json.loads(decoded_data) print("API 调用成功,响应内容:") print(json.dumps(json_response, indent=2, ensure_ascii=False)) # 格式化打印JSON return json_response except json.JSONDecodeError: print("错误: 无法将响应解码为JSON。原始响应内容:") print(response_data_bytes.decode("utf-8", errors="replace")) # 尝试解码,替换无法解码的字符 return None except Exception as e: print(f"处理成功响应时出错: {e}") return None else: print("API 调用失败。") print(f"原始响应内容 ({response_status} {response_reason}):") print(response_data_bytes.decode("utf-8", errors="replace")) return None
except http.client.Gaierror as e: # 地址解析错误 print(f"错误: 无法解析主机名 '{host}'. 请检查API基础URL配置。错误详情: {e}") except ConnectionRefusedError as e: print(f"错误: 连接到 '{host}' 被拒绝。请检查API服务是否正在运行以及网络连接。错误详情: {e}") except http.client.HTTPException as e: # 更通用的HTTP客户端错误 print(f"HTTP 请求期间发生错误: {e}") except Exception as e: print(f"发生未知错误: {e}") import traceback traceback.print_exc() # 打印详细堆栈信息 finally: if conn: conn.close() # print("连接已关闭。")
return None
# 主程序执行部分if __name__ == "__main__": if API_KEY == "YOUR_ACTUAL_API_KEY" or not API_KEY: # 再次检查,以防用户未替换 print("错误:请在脚本顶部将 'YOUR_ACTUAL_API_KEY' 替换为您的真实API密钥。") else: # 调用API函数 result = call_image_api( api_key=API_KEY, base_url_config=API_BASE_URL_CONFIG, path_config=API_PATH_CONFIG, model=MODEL, prompt_text=PROMPT_TEXT, image_url=IMAGE_URL_TO_EDIT )
if result: # 在这里,您可以根据API的实际响应结构来处理 'result' # 例如,如果它返回了编辑后图片的URL或base64数据: # edited_image_url = result.get("choices", [{}])[0].get("message", {}).get("tool_calls", [{}])[0].get("image",{}).get("url") # if edited_image_url: # print(f"\n编辑后的图片URL (示例提取路径): {edited_image_url}") # else: # print("\n未能从响应中提取编辑后的图片URL,请检查上面的完整响应内容。") pass # 当前代码只打印完整响应,具体提取逻辑取决于API返回的JSON结构 else: print("\nAPI 调用未成功返回有效数据。")
print("\n脚本执行完毕。")- 将脚本顶部的 API_KEY = “sk-wLdqZ6SP5GjJSxHwsUbFNUVKMxhDJCoG06Xfexo2V9Eq4Z6n” 中的密钥替换为您从 sg.4All API.com (或其他提供商) 获取的 真实API密钥 。
- 根据需要修改 API_BASE_URL_CONFIG (默认为 https://sg.4All API.com ) 和 API_PATH_CONFIG (默认为 /v1/chat/completions ) 以匹配您的API服务。
- 根据需要修改 MODEL , PROMPT_TEXT , 和 IMAGE_URL_TO_EDIT 。
- 运行脚本。
关于响应内容的处理:
Section titled “关于响应内容的处理:”请注意,当前代码在 if name == “main”: 部分成功调用API后,只是打印了完整的JSON响应。您需要根据您API( gpt-4o-image 模型在 sg.4All API.com 上) 实际返回的JSON数据结构 来进一步解析和提取您需要的信息(例如,编辑后图像的URL或base64数据)。我在代码末尾注释掉了对此类提取的示例性代码,您需要根据实际情况调整。