> ## Documentation Index
> Fetch the complete documentation index at: https://bianxieai.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Gemini 编辑图片

> 向 Gemini 提交图片和文本指令生成编辑结果

图片编辑同样使用 `generateContent`。客户端先把输入图片编码为 Base64，再与编辑指令一起放入 `contents[].parts[]`。

## 请求字段

| 字段                                         | 类型          | 必填 | 说明                                         |
| ------------------------------------------ | ----------- | -- | ------------------------------------------ |
| `model`                                    | path string | 是  | 支持图片编辑的 Gemini 模型 ID。                      |
| `contents[].parts[].text`                  | string      | 是  | 编辑指令。                                      |
| `contents[].parts[].inlineData`            | object      | 是  | JSON 线路中的输入图片。                             |
| `inlineData.mimeType`                      | string      | 是  | 如 `image/png`、`image/jpeg` 或 `image/webp`。 |
| `inlineData.data`                          | string      | 是  | 不含 data URL 前缀的 Base64 图片内容。               |
| `generationConfig.imageConfig.aspectRatio` | string      | 否  | 输出宽高比。                                     |

<CodeGroup>
  ```bash cURL theme={null}
  IMAGE_BASE64=$(base64 < input.png | tr -d '\n')

  curl "https://api.bianxie.ai/v1beta/models/your-model:generateContent" \
    -H "Authorization: Bearer API_KEY" \
    -H "Content-Type: application/json" \
    --data-binary @- <<JSON
  {
    "contents": [{
      "role": "user",
      "parts": [
        {"text": "把背景改成夜晚城市，保留主体"},
        {"inlineData": {"mimeType": "image/png", "data": "$IMAGE_BASE64"}}
      ]
    }],
    "generationConfig": {
      "imageConfig": {"aspectRatio": "9:16"}
    }
  }
  JSON
  ```

  ```python Python theme={null}
  import base64
  import requests

  with open("input.png", "rb") as file:
      image_base64 = base64.b64encode(file.read()).decode("utf-8")

  response = requests.post(
      "https://api.bianxie.ai/v1beta/models/your-model:generateContent",
      headers={"Authorization": "Bearer API_KEY"},
      json={
          "contents": [{
              "role": "user",
              "parts": [
                  {"text": "把背景改成夜晚城市，保留主体"},
                  {"inlineData": {"mimeType": "image/png", "data": image_base64}},
              ],
          }],
          "generationConfig": {"imageConfig": {"aspectRatio": "9:16"}},
      },
      timeout=120,
  )
  response.raise_for_status()
  data = response.json()
  for candidate in data.get("candidates", []):
      for index, part in enumerate(candidate.get("content", {}).get("parts", [])):
          image = part.get("inlineData")
          if image and image.get("data"):
              with open(f"edited-{index}.png", "wb") as file:
                  file.write(base64.b64decode(image["data"]))
  ```

  ```javascript Node.js theme={null}
  import { readFile, writeFile } from "node:fs/promises";

  const input = (await readFile("input.png")).toString("base64");
  const response = await fetch("https://api.bianxie.ai/v1beta/models/your-model:generateContent", {
    method: "POST",
    headers: { Authorization: "Bearer API_KEY", "Content-Type": "application/json" },
    body: JSON.stringify({
      contents: [{ role: "user", parts: [
        { text: "Replace the background with a city at night" },
        { inlineData: { mimeType: "image/png", data: input } }
      ] }],
      generationConfig: { imageConfig: { aspectRatio: "9:16" } }
    })
  });
  const data = await response.json();
  const image = data.candidates?.[0]?.content?.parts?.find((part) => part.inlineData)?.inlineData;
  if (image?.data) await writeFile("edited.png", Buffer.from(image.data, "base64"));
  ```
</CodeGroup>

JSON REST 请求使用 `inlineData`、`mimeType` 等 camelCase 字段。某些 SDK 对象可能展示 `inline_data`、`mime_type`，不要把 SDK 命名直接复制到 JSON 请求。

返回图片的读取方式与生成图片相同。根据实际 `mimeType` 选择文件扩展名，不要始终假定为 PNG。
