搜索结果

×

搜索结果将在这里显示。

🟠 GPT 编图格式

📝 AI绘画模型简介

  • gpt-4o-image gpt-4o-image-vip这两个模型是ChatGPT新GPT-4o图像功能。OpenAI API模型gpt-image-1提供多种强大的图像生成模型,可以根据自然语言描述创建、可以对话编辑和修改图像。

💡 Python请求示例

图片编辑示例(一) ✅


import http.client
import json
from 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.uiuiapi.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脚本执行完毕。")

使用方法:

  1. 将脚本顶部的 API_KEY = "sk-wLdqZ6SP5GjJSxHwsUbFNUVKMxhDJCoG06Xfexo2V9Eq4Z6n" 中的密钥替换为您从 sg.uiuiapi.com (或其他提供商) 获取的真实API密钥
  2. 根据需要修改 API_BASE_URL_CONFIG (默认为 https://sg.uiuiapi.com) 和 API_PATH_CONFIG (默认为 /v1/chat/completions) 以匹配您的API服务。
  3. 根据需要修改 MODEL, PROMPT_TEXT, 和 IMAGE_URL_TO_EDIT
  4. 运行脚本。

关于响应内容的处理:

请注意,当前代码在 if __name__ == "__main__": 部分成功调用API后,只是打印了完整的JSON响应。您需要根据您API(gpt-4o-image 模型在 sg.uiuiapi.com 上)实际返回的JSON数据结构来进一步解析和提取您需要的信息(例如,编辑后图像的URL或base64数据)。我在代码末尾注释掉了对此类提取的示例性代码,您需要根据实际情况调整。