文档

文本生成图像

更新时间:

根据文本描述或现有图像(简称”文生图“),使用通义万相-文本生成图像模型,轻松生成您想要的图像。

基本介绍

通义万相-文本生成图像是基于自研的Composer组合生成框架的AI绘画创作大模型,能够根据用户输入的文字内容,生成符合语义描述的多样化风格的图像。

通义万相-文本生成模型具有的能力有:

  • 支持中英文双语输入。

  • 支持多种风格,包括但不限于素描、水彩、油画、中国风、二次元、3D卡通、 扁平插画、摄影以及人像写真图像等。

  • 支持客户自定义修饰词,可生成不同风格、不同主题、不同派别的图片,满足个性创意的AI图片生成需求。

  • 支持输入参考图片进行参考内容或者参考风格迁移,实现更丰富的风格、主题和派别。

示例:根据文本描述和参考图像生成图像

在不改变图片主要内容的情况下可根据文本描述改变参考图的画面风格,见下图。

image

还可以将图片的颜色、笔触、材质等作为参考,用来生成同种风格的图像,见下图。

image

如果您想在页面体验文生图,可以前往通义万相-文生图

使用场景

关于基础文生图模型的使用场景,您可以运用在:

  • 艺术与设计创作:生成概念草图、插画、海报、包装设计、甚至数字艺术品。

  • 广告与营销物料生成:即时响应广告文案,生成符合品牌调性、产品特性和营销策略的视觉内容。

  • 教育与培训资源制作:创建生动、直观的教学素材,定制化的图像资源还能用于制作互动课件、电子教科书,丰富教育资源库。

  • 新闻与媒体内容生产:增强新闻的视觉呈现,确保新闻报道的时效性和准确性。

  • 游戏与娱乐内容开发:快速生成游戏内的角色、道具、环境元素等美术资源,动态生成游戏NPC(非玩家角色)外观或定制化的玩家角色。

  • 室内设计与家居装饰:提供虚拟设计方案,可生成相应的空间布局、色彩搭配及装饰细节的三维视图或渲染图。

  • 时尚与服装设计:服装设计和虚拟试穿体验。电商平台可以结合用户身材数据,让用户输入文字描述想要的服装款式或风格,生成个性化虚拟试穿图片。

  • 图书封面与插图生成:生成与书籍主题契合的封面设计和内页插图。

特色优势

  • 知识重组&可变维扩散模型:基于自研的Composer组合生成框架的AI绘画创作大模型,通过知识重组与可变维度扩散模型,生成符合语义描述的多样化风格的图像。

  • 效果业界领先:生成图像语义一致性更精准,AI绘画创作布局自然、细节丰富、画面细腻、结果逼真。

模型概览

模型名

模型简介

免费额度

计费单价

限流(含主账号与RAM子账号)

任务下发接口QPS限制

同时处理中任务数量

wanx-v1

通义万相-文本生成图像大模型。支持中英文双语输入。重点风格包括但不限于水彩、油画、中国画、素描、扁平插画、二次元、3D卡通、 摄影、人像写真。

免费额度:500张

领取方式:开通阿里云百炼大模型服务后,自动发放

有效期:180天

0.16元/张

2

1

快速开始

通义万相-文生图模型的详细使用,请参考文本生成图像API参考

文生图模型主要提供两个能力:

  • 基础文生图:输入文本,生成图像

  • 相似图生成:输入文本和参考图像,生成风格相似的图像

基础文生图

您可以输入中英文提示词生成图像。

为了获得更符合预期的图像,推荐您设置输出图像的配置参数:

  • 图像风格:自动处理<auto>(默认)、摄影<photography>、人像写真<portrait>、3D卡通<3d cartoon>、动画<anime>、油画<oil painting>、水彩<watercolor>、素描<sketch>、中国画<chinese painting>、扁平插画<flat illustration>。

  • 图像分辨率:1024×1024像素(默认)、720×1280像素、1280×720像素。

  • 图像数量:1-4张,默认为4张。

Prompt(提示词)

风格

输出图像

少女,高分辨率,增加细节,细节强化,侧面视角,森林,奶油风,暖色调,精致的脸部比例,精细的裙子,五官立体,长卷发,极高分辨率,清晰度强化,全身像,微笑,五颜六色的花瓣飞舞,自然光

<auto>

cb28b5a1-2577-420e-9347-7b430bfa0c4f-1.png

<sketch>

人像素描图

由于模型计算耗时较长,示例代码均展示异步处理的调用方式,以避免请求超时。

您需要已获取API-KEY配置API-KEY到环境变量。如果通过SDK调用,还需要安装DashScope SDK

curl

1、创建文生图任务

接口返回任务ID,可根据任务ID查询图像生成的结果。

curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
        "model": "wanx-v1",
        "input": {
            "prompt": "少女,高分辨率,增加细节,细节强化,侧面视角,森林,奶油风,暖色调,精致的脸部比例,精细的裙子,五官立体,长卷发,极高分辨率,清晰度强化,全身像,微笑,五颜六色的花瓣飞舞,自然光"
        },
        "parameters": {
            "style": "<auto>", 
            "size": "1024*1024",
            "n":1
        }
    }'

2、根据任务ID查询结果

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/{your_task_id} \
     -H "Authorization: Bearer $DASHSCOPE_API_KEY" \

Java

import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisParam;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {

    public void asyncCall() {
        System.out.println("---create task----");
        String taskId = this.createAsyncTask();
        System.out.println("---wait task done then return image url----");
        this.waitAsyncTask(taskId);
    }


    /**
     * 创建异步任务
     * @return taskId
     */
    public String createAsyncTask() {
        String prompt = "少女,高分辨率,增加细节,细节强化,侧面视角,森林,奶油风,暖色调,精致的脸部比例,精细的裙子,五官立体,长卷发,极高分辨率,清晰度强化,全身像,微笑,五颜六色的花瓣飞舞,自然光";
        ImageSynthesisParam param =
                ImageSynthesisParam.builder()
                        .model(ImageSynthesis.Models.WANX_V1)
                        .prompt(prompt)
                        .n(1)
                        .size("1024*1024")
                        .build();

        ImageSynthesis imageSynthesis = new ImageSynthesis();
        ImageSynthesisResult result = null;
        try {
            result = imageSynthesis.asyncCall(param);
        } catch (Exception e){
            throw new RuntimeException(e.getMessage());
        }
        String taskId = result.getOutput().getTaskId();
        System.out.println("taskId=" + taskId);
        return taskId;
    }


    /**
     * 等待异步任务结束
     * @param taskId 任务id
     * */
    public void waitAsyncTask(String taskId) {
        ImageSynthesis imageSynthesis = new ImageSynthesis();
        ImageSynthesisResult result = null;
        try {
            // If you have set the DASHSCOPE_API_KEY in the system environment variable, the apiKey can be null.
            result = imageSynthesis.wait(taskId, null);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }

        System.out.println(JsonUtils.toJson(result.getOutput()));
        System.out.println(JsonUtils.toJson(result.getUsage()));
    }


    public static void main(String[] args){
        Main main = new Main();
        main.asyncCall();
    }

}

Python

from http import HTTPStatus
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath
import requests
from dashscope import ImageSynthesis

prompt = '少女,高分辨率,增加细节,细节强化,侧面视角,森林,奶油风,暖色调,精致的脸部比例,精细的裙子,五官立体,长卷发,极高分辨率,清晰度强化,全身像,微笑,五颜六色的花瓣飞舞,自然光'


def async_call():
    print('----create task----')
    task_info = create_async_task()
    print('----wait task done then save image----')
    wait_async_task(task_info)


# 创建异步任务
def create_async_task():
    rsp = ImageSynthesis.async_call(model=ImageSynthesis.Models.wanx_v1,
                                    prompt=prompt,
                                    n=1,
                                    style='<auto>',
                                    size='1024*1024')
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output)
    else:
        print('create_async_task Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))
    return rsp


# 等待异步任务结束
def wait_async_task(task):
    rsp = ImageSynthesis.wait(task)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.task_status)
        # save file to current directory
        for result in rsp.output.results:
            file_name = PurePosixPath(unquote(urlparse(result.url).path)).parts[-1]
            with open('./%s' % file_name, 'wb+') as f:
                f.write(requests.get(result.url).content)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))


if __name__ == '__main__':
    async_call()

相似图生成

您可以输入中英文提示词,并提供一张参考图像,模型能够根据参考图像的颜色、风格以及提示词生成相似图。

重要参数设置请参考:基础文生图

Prompt(提示词)

风格

参考图像

输出图像

玫瑰花海,背景是日出,采用淡紫色和粉红色的概念艺术装置风格,郁郁葱葱的风景,以及有序的布局

<auto>

玫瑰.png

6e2a1f7f-177f-4d2a-bddd-e8ad48ab0d30-1.png

curl

1、创建文生图任务

接口返回任务ID,可根据任务ID查询图像生成的结果。

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis' \
--header 'X-DashScope-Async: enable' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
  "model": "wanx-v1",
  "input": {
    "prompt": "玫瑰花海,背景是日出,采用淡紫色和粉红色的概念艺术装置风格,郁郁葱葱的风景,以及有序的布局",
    "ref_img": "https://huarong123.oss-cn-hangzhou.aliyuncs.com/image/%E7%8E%AB%E7%91%B0.png"
  },
  "parameters": {
    "n": 1
  }
}'

2、根据任务ID查询结果

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/{your_task_id} \
     -H "Authorization: Bearer $DASHSCOPE_API_KEY" \

Python

from http import HTTPStatus
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath
import requests
from dashscope import ImageSynthesis

prompt = '玫瑰花海,背景是日出,采用淡紫色和粉红色的概念艺术装置风格,郁郁葱葱的风景,以及有序的布局'
ref_img = "https://huarong123.oss-cn-hangzhou.aliyuncs.com/image/%E7%8E%AB%E7%91%B0.png"


def async_call():
    print('----create task----')
    task_info = create_async_task()
    print('----wait task done then save image----')
    wait_async_task(task_info)


# 创建异步任务
def create_async_task():
    rsp = ImageSynthesis.async_call(model=ImageSynthesis.Models.wanx_v1,
                                    prompt=prompt,
                                    n=1,
                                    style='<auto>',
                                    size='1024*1024',
                                    ref_img=ref_img)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output)
    else:
        print('create_async_task Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))
    return rsp


# 等待异步任务结束
def wait_async_task(task):
    rsp = ImageSynthesis.wait(task)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.task_status)
        # save file to current directory
        for result in rsp.output.results:
            file_name = PurePosixPath(unquote(urlparse(result.url).path)).parts[-1]
            with open('./%s' % file_name, 'wb+') as f:
                f.write(requests.get(result.url).content)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))


if __name__ == '__main__':
    async_call()
    

Java

import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisParam;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {

    public void syncCall() {
        String prompt = "玫瑰花海,背景是日出,采用淡紫色和粉红色的概念艺术装置风格,郁郁葱葱的风景,以及有序的布局";
        String refImage = "https://huarong123.oss-cn-hangzhou.aliyuncs.com/image/%E7%8E%AB%E7%91%B0.png";
        ImageSynthesisParam param =
                ImageSynthesisParam.builder()
                        .model(ImageSynthesis.Models.WANX_V1)
                        .prompt(prompt)
                        .n(1)
                        .size("1024*1024")
                        .refImage(refImage)
                        .build();

        ImageSynthesis imageSynthesis = new ImageSynthesis();
        ImageSynthesisResult result = null;
        try {
            System.out.println("---sync call, please wait a moment----");
            result = imageSynthesis.call(param);
        } catch (ApiException|NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }
        System.out.println(JsonUtils.toJson(result));
    }


    public static void main(String[] args){
        Main text2Image = new Main();
        text2Image.syncCall();
    }

}