Skip to content

超级特价 gemini-2.5-flash-image-0.07

超级特价的模型当然有特别的调用方法啦
请参照下面的方法使用嗷!

模型名称

gemini-2.5-flash-image-0.07

POST 请求

  • 接口地址:http://www.dmxapi.cn/v1beta/models/gemini-2.5-flash-image-0.07:GenerateContent
  • 方法:POST
  • 必要请求头:Content-Type: application/jsonAuthorization: Bearer <你的密钥>
  • 请求体:使用通用多模态结构 contents -> parts -> text

curl 示例(Linux/macOS,或在 Windows 直接使用 curl.exe):

bash
curl -X POST 'http://www.dmxapi.cn/v1beta/models/gemini-2.5-flash-image-0.07:GenerateContent' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer sk-*******************************' \
  -d '{"contents":[{"parts":[{"text":"画一只小狗在在树上跳舞"}]}]}'

返回说明:

  • Content-Typeimage/ 开头,表示直接返回图片二进制,可直接保存为图片文件。
  • 若返回 JSON,请从 candidates[].content.parts[].inline_data.data(或 inlineData.data)提取 base64 并解码为图片。

文生图python示例

python
# 本脚本:调用 dmxapi 的 Gemini 2.5 Flash Image 接口,根据文本生成图片,并将结果保存到本地。
# 兼容两种返回形式:
# 1) 直接返回图片二进制(Content-Type: image/*),直接落盘;
# 2) 返回 JSON,其中图片位于 inline_data.base64(或 inlineData.data),需 base64 解码保存。

import os  # 文件与路径操作
import time  # 时间戳用于输出文件命名
import base64  # 处理 base64 编解码
import mimetypes  # 根据 MIME 类型猜测文件扩展名
import requests  # 发送 HTTP 请求

# 模型生成接口地址(dmxapi,gemini-2.5-flash-image-0.07)
url = "https://www.dmxapi.cn/v1beta/models/gemini-2.5-flash-image-0.07:GenerateContent"

# 请求头:使用 JSON 格式,需携带 Bearer 鉴权令牌
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer sk-********************************", #填入你的DMXAPI的令牌
}

# 请求体:contents/parts 结构为 API 的通用多模态消息格式
# 这里仅演示文本提示词(如需图文/图像输入,可按 API 结构扩展 parts)
payload = {
    "contents": [
        {
            "parts": [
                {"text": "画一只小狗在在树上跳舞"}  # 示例提示词
            ]
        }
    ]
}

# 输出目录,若不存在则创建
output_dir = "output"
os.makedirs(output_dir, exist_ok=True)

try:
    # 发送 POST 请求,设置 120 秒超时
    resp = requests.post(url, headers=headers, json=payload, timeout=120)
    resp.raise_for_status()  # 非 2xx 状态码会抛出异常

    ct = resp.headers.get("Content-Type", "")  # 获取返回的内容类型

    # 情况一:服务端直接返回图片二进制,按 MIME 保存
    if ct.startswith("image/"):
        # 从 Content-Type 推断扩展名,如 image/png -> .png
        ext = mimetypes.guess_extension(ct.split(";")[0].strip()) or ".png"
        filename = os.path.join(output_dir, f"gemini_image_{time.strftime('%Y%m%d_%H%M%S')}{ext}")
        with open(filename, "wb") as f:
            f.write(resp.content)  # 直接写入二进制内容
        print(f"已保存图片: {filename}")
    else:
        # 情况二:常见为 JSON,需要解析其中的 inline_data.base64 字段
        try:
            data = resp.json()  # 尝试解析 JSON
        except ValueError:
            # 如果既不是图片也不是 JSON,则直接保存原始文本以便排查
            filename = os.path.join(output_dir, f"response_{time.strftime('%Y%m%d_%H%M%S')}.txt")
            with open(filename, "w", encoding="utf-8") as f:
                f.write(resp.text)
            print(f"未发现图片数据,已保存原始响应到: {filename}")
        else:
            saved = 0  # 记录保存的图片数量
            candidates = data.get("candidates") or []  # 候选结果列表
            for ci, cand in enumerate(candidates):
                content = (cand or {}).get("content") or {}
                parts = content.get("parts") or []
                for pi, part in enumerate(parts):
                    # 兼容两种键名:inline_data / inlineData
                    inline = part.get("inline_data") or part.get("inlineData")
                    if inline and inline.get("data"):
                        b64 = inline.get("data")  # base64 字符串
                        # 兼容 mime_type / mimeType 两种写法,默认使用 image/png
                        mime = inline.get("mime_type") or inline.get("mimeType") or "image/png"
                        try:
                            img_bytes = base64.b64decode(b64)  # 尝试 base64 解码
                        except Exception:
                            # 如果不是标准 base64,则原样写入文本以便后续排查
                            img_bytes = b64.encode("utf-8")
                        # 根据 MIME 类型猜测扩展名,缺省为 .png
                        ext = mimetypes.guess_extension(mime) or ".png"
                        filename = os.path.join(
                            output_dir,
                            f"gemini_image_{time.strftime('%Y%m%d_%H%M%S')}_{saved}{ext}"
                        )
                        with open(filename, "wb") as f:
                            f.write(img_bytes)
                        print(f"已保存图片: {filename}")
                        saved += 1
            if saved == 0:
                # 没有发现任何图片数据:将整个 JSON 保存,便于进一步分析
                filename = os.path.join(output_dir, f"response_{time.strftime('%Y%m%d_%H%M%S')}.json")
                try:
                    import json  # 仅在需要写 JSON 时导入
                    with open(filename, "w", encoding="utf-8") as f:
                        json.dump(data, f, ensure_ascii=False, indent=2)
                    print(f"未发现图片数据,已保存JSON响应到: {filename}")
                except Exception:
                    # 如果写 JSON 失败则退化为写入字符串文本
                    with open(filename, "w", encoding="utf-8") as f:
                        f.write(str(data))
                    print(f"未发现图片数据,已保存文本响应到: {filename}")
except requests.RequestException as e:
    # 网络错误、超时、HTTP 错误等统一在此捕获
    print(f"请求失败:{e}")

图片编辑 python示例

不支持调整图片比例

python
# 说明:本脚本调用 `dmxapi` 的 `chat/completions` 接口进行图片编辑,
# 并从响应中解析图片数据,保存到脚本同级的 `output` 目录。
# 使用:直接运行该脚本,会将返回的图片落盘;若响应为文本或 JSON,
# 则会按需保存原始内容或解析后的图片,便于排查与复用。
import os
import re
import base64
import datetime
import mimetypes
import requests


def ensure_output_dir():
    """确保并返回输出目录路径;若不存在则在脚本目录下创建 output 子目录。"""
    out_dir = os.path.join(os.path.dirname(__file__), "output")
    os.makedirs(out_dir, exist_ok=True)
    return out_dir


def is_base64_image_string(s):
    """判断字符串是否可能是图片 Base64 或 data:image 形式。"""
    if not isinstance(s, str):
        return False
    s = s.strip()
    if not s:
        return False
    # 支持 data:image/png;base64,xxxxx 形式
    if s.startswith("data:image"):
        return True
    # 避免误判太短的字符串
    if len(s) < 100:
        return False
    # 基本的base64字符集判断
    if re.fullmatch(r"[A-Za-z0-9+/=\s]+", s) is None:
        return False
    # 校验并检查是否为常见图片格式签名
    try:
        b = base64.b64decode(s, validate=True)
    except Exception:
        return False
    sig = b[:12]
    return (
        sig.startswith(b"\x89PNG\r\n\x1a\n")  # PNG
        or sig.startswith(b"\xff\xd8")  # JPEG
        or (sig[:4] == b"RIFF" and sig[8:12] == b"WEBP")  # WEBP
        or sig[:6] in (b"GIF87a", b"GIF89a")  # GIF
    )


def decode_base64_image(s):
    """将 Base64 字符串解码为图片二进制;支持 data:image 前缀。"""
    if s.startswith("data:image"):
        s = s.split(",", 1)[1]
    try:
        return base64.b64decode(s, validate=True)
    except Exception:
        return None


def guess_image_ext(b):
    """根据图片字节签名猜测扩展名(png/jpg/webp/gif),默认返回 png。"""
    if b.startswith(b"\x89PNG\r\n\x1a\n"):
        return "png"
    if b.startswith(b"\xff\xd8"):
        return "jpg"
    if b[:4] == b"RIFF" and b[8:12] == b"WEBP":
        return "webp"
    if b[:6] in (b"GIF87a", b"GIF89a"):
        return "gif"
    return "png"

# 新增:从文本中提取 data URL(含 MIME 和 base64 数据)
def extract_data_urls_from_text(text):
    """从文本中批量提取形如 data:image/...;base64,xxx 的数据 URL。"""
    results = []
    if not isinstance(text, str):
        return results
    pattern = re.compile(r"data:(image/[a-zA-Z0-9.+-]+);base64,([A-Za-z0-9+/=\s]+)")
    for m in pattern.finditer(text):
        mime = m.group(1)
        b64 = m.group(2)
        results.append((mime, b64))
    return results


def collect_base64_images(obj, acc):
    """递归收集对象中的 Base64 图片字符串或嵌入 data URL。"""
    if isinstance(obj, dict):
        for _, v in obj.items():
            if isinstance(v, str) and is_base64_image_string(v):
                acc.append(v)
            elif isinstance(v, str):
                # 新增:字符串中嵌入的 data URL
                for mime, b64 in extract_data_urls_from_text(v):
                    acc.append(f"data:{mime};base64,{b64}")
            else:
                collect_base64_images(v, acc)
    elif isinstance(obj, list):
        for item in obj:
            collect_base64_images(item, acc)


# 接口地址:dmxapi 的 chat/completions(兼容 OpenAI 风格)
url = "http://www.dmxapi.cn/v1/chat/completions"
# 请求头:Authorization 请替换为你的实际密钥;Content-Type 指定 JSON
headers = {
    "Authorization": "Bearer sk-*******************************************", # 填入你的DMXAPI的令牌
    "Content-Type": "application/json",
}

# 请求体:指定模型、是否流式、以及消息内容(文本 + 图片)
payload = {
    "model": "gemini-2.5-flash-image-0.07",
    "stream": False,
    "messages": [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "替换这个男人身上衣服的颜色为紫色"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://storage.googleapis.com/datanebula_open_public_test_bucket/20250912-195507.png"
                    },
                },
            ],
        }
    ],
    "generationConfig": {
        "responseModalities": ["TEXT", "IMAGE"],
        "imageConfig": {"aspectRatio": "1:1"}, # 不可选,不可调整,不生效!
    },
}


def save_images_from_response_json(data):
    """解析 JSON 响应中可能包含的图片字段(candidates/choices/任意嵌套),尽可能保存图片到 output 目录。"""
    out_dir = ensure_output_dir()
    saved = []

    # 优先按参考结构解析 candidates -> content -> parts -> inline_data/inlineData
    try:
        candidates = data.get("candidates") or []
        ts = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
        for ci, cand in enumerate(candidates):
            content = (cand or {}).get("content") or {}
            parts = content.get("parts") or []
            for pi, part in enumerate(parts):
                inline = part.get("inline_data") or part.get("inlineData")
                if inline and inline.get("data"):
                    b64 = inline.get("data")
                    mime = inline.get("mime_type") or inline.get("mimeType") or "image/png"
                    try:
                        img_bytes = base64.b64decode(b64)
                    except Exception:
                        img_bytes = b64.encode("utf-8")
                    ext = (mimetypes.guess_extension(mime) or ".png").lstrip(".")
                    path = os.path.join(out_dir, f"response_image_{ts}_{len(saved)+1}.{ext}")
                    with open(path, "wb") as f:
                        f.write(img_bytes)
                    saved.append(path)
                    print("图片已保存:", path)
    except Exception:
        # 保持健壮性,任何异常不影响后续兜底逻辑
        pass

    # 新增:解析 OpenAI chat.completions -> choices[].message.content 中的 data URL
    try:
        choices = data.get("choices") or []
        ts2 = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
        for ch in choices:
            msg = (ch or {}).get("message") or {}
            content_text = msg.get("content")
            if isinstance(content_text, str):
                for mime, b64 in extract_data_urls_from_text(content_text):
                    try:
                        img_bytes = base64.b64decode(b64)
                    except Exception:
                        continue
                    ext = (mimetypes.guess_extension(mime) or ".png").lstrip(".")
                    path = os.path.join(out_dir, f"response_image_{ts2}_{len(saved)+1}.{ext}")
                    with open(path, "wb") as f:
                        f.write(img_bytes)
                    saved.append(path)
                    print("图片已保存:", path)
    except Exception:
        pass

    # 若未解析到图片,兜底:在整个 JSON 中收集可能的 base64 图片字符串
    if not saved:
        images_b64 = []
        collect_base64_images(data, images_b64)
        if images_b64:
            ts = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
            for i, s in enumerate(images_b64, start=1):
                b = decode_base64_image(s)
                if not b:
                    continue
                ext = guess_image_ext(b)
                path = os.path.join(out_dir, f"response_image_{ts}_{i}.{ext}")
                try:
                    with open(path, "wb") as f:
                        f.write(b)
                    saved.append(path)
                    print("图片已保存:", path)
                except Exception as e:
                    print("保存图片失败:", e)
        else:
            print("响应中未找到图片数据。")

    return saved


# 主请求流程:调用接口并根据 Content-Type 判定是否直接为图片
try:
    resp = requests.post(url, headers=headers, json=payload, timeout=120)
    print("Status:", resp.status_code)

    ct = resp.headers.get("Content-Type", "")
    if ct.startswith("image/"):
        out_dir = ensure_output_dir()
        ts = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
        ext = (mimetypes.guess_extension(ct.split(";")[0].strip()) or ".png").lstrip(".")
        path = os.path.join(out_dir, f"response_image_{ts}.{ext}")
        with open(path, "wb") as f:
            f.write(resp.content)
        print("图片已保存:", path)
    else:
        try:
            data = resp.json()
        except Exception as e:
            # 非JSON,保留原始文本以便排查
            out_dir = ensure_output_dir()
            ts = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
            path = os.path.join(out_dir, f"response_{ts}.txt")
            with open(path, "w", encoding="utf-8") as f:
                f.write(resp.text)
            print("解析 JSON 失败:", e)
            print("已保存原始响应到:", path)
            data = None

        if data is not None:
            saved_files = save_images_from_response_json(data)
            if saved_files:
                print("共保存图片文件数量:", len(saved_files))
                print("首个图片路径:", saved_files[0])
            else:
                # 未解析到图片,保存JSON以便进一步分析
                try:
                    import json
                    out_dir = ensure_output_dir()
                    ts = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
                    path = os.path.join(out_dir, f"response_{ts}.json")
                    with open(path, "w", encoding="utf-8") as f:
                        json.dump(data, f, ensure_ascii=False, indent=2)
                    print("未发现图片数据,已保存JSON响应到:", path)
                except Exception:
                    pass
except requests.RequestException as e:
    print("Request error:", e)

一个 Key 用全球大模型