
# 图片生成
MaaS支持通过图片生成模型（Qwen-Image-Edit）将用户输入的文本提示词及图片进行处理，输出符合预期的图片。还支持通过调用图片生成模型API，用户可输入文本、单图或多图，实现多图融合创作、图像编辑等多样化玩法。
#### 什么是文生图
**文生图**（Text-to-Image） 是指用户输入自然语言描述（提示词），由大模型自动生成对应图像的技术。其核心流程为：
1. **文本编码**：将用户输入的提示词编码为语义向量。
2. **扩散去噪**：模型从随机噪声出发，依据文本语义逐步去噪，迭代生成图像。
3. **图像输出**：输出与文本描述匹配的图像结果。
该技术广泛应用于设计辅助、内容创作、营销素材生成等场景。
#### 什么是图生图
图生图（Image-to-Image） 是指用户输入一张原始图像及文本描述（提示词），由大模型在原图基础上生成新图像的技术。其核心流程为：
1. **图像编码**：将输入的原始图像编码为潜在表示。
2. **加噪处理**：对原图添加一定程度的噪声（由重绘幅度控制）。
3. **扩散去噪**：模型依据文本语义，从加噪后的图像出发逐步去噪，迭代生成新图像。
4. **图像输** **出**：输出保留原图结构、同时融入新语义的图像结果。
该技术常应用于图像风格转换、局部修复、画质增强等场景。
#### 计费说明
按张计费：按照图片生成的张数计费。
详情请见[MaaS图片生成模型](https://support.huaweicloud.com/price-maas/price-maas-0004.html)。
#### 前提条件
- 已在"模型推理 \> 在线推理 \> 预置服务"页签开通预置服务。详情请见[开通MaaS预置服务](https://support.huaweicloud.com/model-call-maas/model-call-052.html)。
- （可选）如果需要控制服务调用流量，可提前创建自定义接入点，详情请参见[MaaS创建自定义接入点](https://support.huaweicloud.com/model-call-maas/model-call-048.html)。
- 已获取API Key。详情请见[在MaaS管理API Key](https://support.huaweicloud.com/model-call-maas/model-call-049.html)。
- 已获取模型服务的model参数值。支持的模型信息详情请见[图片生成](https://support.huaweicloud.com/model-list-maas/model_list_0001.html#section6)，接口详细信息请参见[图片生成接口详情](https://support.huaweicloud.com/model-call-maas/model-call-023.html)。
 
#### 使用限制
- 图片传入时支持格式：png、jpeg、jpg、webp、bmp、tiff
- Qwen-Image-Edit模型的图片限制如下：
  - 20251028版本：上传的图片文件总大小≤20MB。
  
  - 20250913版本：上传的单个图片文件大小≤15MB。
   
 
#### 支持模型
支持图片生成的模型请参见[图片生成](https://support.huaweicloud.com/model-list-maas/model_list_0001.html#section6)。
#### API说明
模型调用的完整参数列表请见[图片生成](https://support.huaweicloud.com/model-call-maas/model-call-023.html)。
#### 文生图（纯文本输入单图输出）-Qwen_Image（20250821版本）
通过给模型提供清晰准确的文字指令，即可快速获得符合描述的高质量单张图片。
以下为文生图示例代码，可通过model参数替换模型，model参数详情请参见[图片生成](https://support.huaweicloud.com/model-list-maas/model_list_0001.html#section6)。
- [Python]
  ```
  import requests
  import json
  if __name__ == '__main__':
      url = "https://api.modelarts-maas.com/v1/images/generations"  # API地址
      api_key = "MAAS_API_KEY"  # 把MAAS_API_KEY替换成已获取的API Key
      # Send request.
      headers = {
          'Content-Type': 'application/json',
          'Authorization': f'Bearer {api_key}'
      }
      data = {
          "model": "qwen-image",  # model参数
          "prompt": "A running cat.",  # 支持中英文
          "size": "1024x1024",
          "response_format": "b64_json",  # 返回格式，可取值为[url, b64_json], 暂仅支持 b64_json，
          "seed": 1  # 取值范围在[0, 2147483648]， 随机种子，默认1
      }
      response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)
      # Print result.
      print(response.status_code)
      print(response.text)
  ```
- [Curl]
  ```
  curl -X POST "https://api.modelarts-maas.com/v1/images/generations" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $MAAS_API_KEY" \
    -d '{
      "model": "qwen-image",
      "prompt": "A running cat.",
      "size": "1024x1024",
      "response_format": "b64_json",
      "seed": 1
  }'
  ```
- [Java]
  建议JDK版本为15+。
  ```
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;
  import java.time.Duration;
  public class ImageGenerationExample {
      public static void main(String[] args) {
          // 接口地址
          String apiUrl = "https://api.modelarts-maas.com/v1/images/generations";
          // 把MAAS_API_KEY替换成已获取的API Key
          String apiKey = "MAAS_API_KEY";
          // 替换为你要调用的模型名称，例如 "qwen-image"
          String modelName = "qwen-image";
          // 构造请求体
          String requestBody = String.format(
                  """
                      {
                          "model": "%s",
                          "prompt": "A running cat.",
                          "size": "1024x1024",
                          "response_format": "b64_json",
                          "seed": 1
                      }""", modelName);
          // 创建 HttpClient
          HttpClient client = HttpClient.newBuilder()
                  .connectTimeout(Duration.ofSeconds(10))
                  .build();
          // 创建请求
          HttpRequest request = HttpRequest.newBuilder()
                  .uri(URI.create(apiUrl))
                  .header("Content-Type", "application/json")
                  .header("Authorization", "Bearer " + apiKey)
                  .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                  .build();
          try {
              // 发送请求并打印结果
              HttpResponse<String> response = client.send(
                      request, HttpResponse.BodyHandlers.ofString());
              System.out.println("HTTP Status: " + response.statusCode());
              System.out.println("Response Body:\n" + response.body());
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  }
  ```
#### 图文生图（单图输入单图输出）- Qwen-Image-Edit（20250913版本）
基于已有图片，结合文字指令进行图像编辑，包括图像元素增删、风格转化、材质替换、色调迁移、改变背景/视角/尺寸等。
以下为图文生图示例代码，可通过model参数替换模型，model参数详情请参见[图片生成](https://support.huaweicloud.com/model-list-maas/model_list_0001.html#section6)。
- [Python]
  ```
  import requests
  import json
  import base64
  #  Base64 编码格式
  def encode_image(image_path):
      with open(image_path, "rb") as image_file:
          return base64.b64encode(image_file.read()).decode("utf-8")
  base64_image = encode_image("test.jpg")
  if __name__ == '__main__':
      url = "https://api.modelarts-maas.com/v1/images/generations"  # API地址
      api_key = "MAAS_API_KEY"  # 把MAAS_API_KEY替换成已获取的API Key
      # Send request.
      headers = {
          'Content-Type': 'application/json',
          'Authorization': f'Bearer {api_key}'
      }
      data = {
          "model": "qwen_image_edit",  # model参数
          "prompt": "将湖面颜色修改为蓝色",  # 支持中英文
          "size": "1024x1024",
          # 生成图像尺寸qwen_image_edit要求介于[512x512,2048x2048]。
          # 推荐：2048x2048,1536x1536,1024x1024, 512x512，其中height和width需要被16整除，否则会向下兼容。
          "image": f"data:image/jpg;base64,{base64_image}",
          # 支持图片格式 ["png", "jpeg", "jpg", "webp", "bmp", "tiff"]，支持使用Base64形式或公网可访问的URL传递图片。
          "seed": 44  # 取值范围在[0, 2147483648]， 随机种子
      }
      response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)
      # Print result.
      print(response.status_code)
      print(response.text)
  ```
- [Curl]
  ```
  curl -X POST https://api.modelarts-maas.com/v1/images/generations \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $MAAS_API_KEY" \
    -d '{
      "model": "qwen_image_edit",
      "prompt": "将湖面颜色修改为蓝色",
      "size": "1024x1024",
      "image": "data:image/jpg;base64,$BASE64_IMAGE",
      "seed": 44
  }'
  ```
#### 多图融合（多图输入单图输出）- Qwen-Image-Edit（20251028版本）
根据您输入的文本描述和多张参考图片，融合它们的风格、元素等特征来生成新图像。如衣裤鞋帽与模特图融合成穿搭图，人物与风景融合为人物风景图等。
以下为多图输入单图输出的Python示例代码，可通过model参数替换模型，model参数详情请参见[图片生成](https://support.huaweicloud.com/model-list-maas/model_list_0001.html#section6)。
```
import requests
import json
import base64
#  Base64 编码格式
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")
base64_image1 = encode_image("test1.jpg")
base64_image2 = encode_image("test2.jpg")
if __name__ == '__main__':
    url = "https://api.modelarts-maas.com/v1/images/generations"  # API地址
    api_key = "MAAS_API_KEY"  # 把MAAS_API_KEY替换成已获取的API Key
    # Send request.
    headers = {
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {api_key}'
    }
    data = {
        "model": "qwen-image-edit-2509",  # model参数
        "prompt": "将图1中背景颜色修改为图2湖面颜色",  # 支持中英文
        "size": "1024x1024",
        # [非必填]生成图像的宽度和高度范围为[512, 3072]像素，不填会根据传入的image尺寸生成。
        # 推荐尺寸[1024x1024,1536x1536,2048x2048,3072x3072]
        "image": f"data:image/jpg;base64,{base64_image1},data:image/jpg;base64,{base64_image2}",
        # 支持图片格式["png", "jpeg", "jpg", "webp", "bmp", "tiff"]，支持使用Base64形式或公网可访问的URL传递图片。
        "seed": 44  # 取值范围在[0, 2147483648]， 随机种子
    }
    response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)
    # Print result.
    print(response.status_code)
    print(response.text)
```
#### 关键能力
- **指令遵循（提示词）**
  参数：input.prompt（必选）。
  **prompt**：文本提示词，用于引导模型生成图像，支持中英文，长度不超过800个字符，每个汉字/字母占一个字符，超过部分会自动截断。长度不超过2000Tokens。
  
- **设置输出图像分辨率**
  参数: parameters.size (string)，格式为 **"宽\*高"**。
  **Qwen-Image模型**：
  生成图像尺寸，宽度和高度范围为\[512x512, 2048x2048\]像素，宽度和高度需要被8整除，否则会向下兼容。
  宽高比及宽高像素值推荐如下：
  - 1:1，例如2048x2048、1536x1536、1024x1024、512x512。
  
  - 4:3，例如2304x1728。
  
  - 3:4，例如1728x2304。
  
  - 16:9，例如2560x1440。
  
  - 9:16，例如1440x2560。
  
  - 3:2，例如2496x1664。
  
  - 2:3，例如1664x2496。
  
  
  **Qwen-Image-Edit模型** **（20250913版本）：**
  生成图像的尺寸，宽度和高度范围为\[512,2048\]像素。
  - 如果用户填写size，系统将按照size生成图片；如果用户不填写size，系统将按照传入图片的尺寸生成图片。
  
  - 宽高比及宽高像素值推荐如下：
    - 1:1，例如2048x2048、1024x1024、512x512、1328x1328。
    
    - 4:3，例如2304x1728。
    
    - 3:4，例如1728x2304。
    
    - 16:9，例如2560x1440。
    
    - 9:16，例如1440x2560。
    
    - 3:2，例如2496x1664。
    
    - 2:3，例如1664x2496。
     
  
  
  **Qwen-Image-Edit模型** **（20251028版本）：**
  生成图像的尺寸，宽度和高度范围为\[512,3072\]像素。宽高比及宽高像素值推荐如下：
  - 1:1，例如1024x1024、1536x1536、2048x2048、3072x3072。
  
  - 4:3，例如2304x1728。
  
  - 3:4，例如1728x2304。
  
  - 16:9，例如2560x1440。
  
  - 9:16，例如1440x2560。
  
  - 3:2，例如2496x1664。
  
  - 2:3，例如1664x2496。
   
  如果用户填写size，系统将按照size生成图片。size需满足以下条件。
  - 宽高比在1:12或12:1以内，否则会报错。
  
  - 生成图像支持分辨率：面积=宽度x高度。 可生成的图片最小面积：512x512；可生成的图片最大面积：3072x3072。
    如果输入超出面积的范围，系统将按size比例缩放输入尺寸，以使总面积接近允许的最小值或最大值。
    
   
  如果用户不填写size，系统将按照传入image中第一张图片尺寸和格式生成图片。
  

- **图片输出方式**
  通过设置**response_format**参数，可以指定生成图像的返回方式为b64_json：以Base64编码字符串的JSON格式返回图像数据。
  当前仅支持b64_json：
  ```
  {
      "response_format": "b64_json"
  }
  ```
  

- **图片中添加水印**
  通过设置**watermark**参数，来控制是否在生成的图片中添加水印。
  - false：不添加水印。
  
  - true：在图片右下角添加"AI生成"字样的水印标识。
  
  
  ```
  {
      "watermark": true
  }
  ```
  
 
