【SpringAIAlibaba新手村系列】(9)Text to Image 文本生成图像技术

0 阅读5分钟

第九章 Text to Image 文本生成图像技术

版本标注

  • Spring AI: 1.1.2
  • Spring AI Alibaba: 1.1.2.0

章节定位

  • 图像生成既可以单独通过 ImageModel 使用,也可以作为多模态能力的一部分接入 Agent。
  • 在项目实践里,Text to Image 往往会和图像理解、语音输出、多模态输入一起组成完整的多模态应用。

s01 > s02 > s03 > s04 > s05 > s06 > s07 > s08 > [ s09 ] s10 > s11 > s12 > s13 > s14 > s15 > s16 > s17 > s18

"提示词一变, 画风就变" -- 文生图本质上是在和模型协商画面细节。


一、什么是 Text to Image?

1.1 概念科普

Text to Image(文生图) 是 AI 的一种能力,你只需要输入一段文字描述,AI 就能生成对应的图片。

就像有一个"画家"根据你的描述作画:

  • 你说:"一只可爱的小猫在草地上玩耍"
  • AI 生成:
  /_/\  
 ( o.o ) 
  > ^ <

(当然,真实AI生成的是真实的照片风格的图片)

1.2 技术原理

文生图通常使用扩散模型(Diffusion Model) ,核心原理是:

  1. 正向扩散:把一张图片逐渐添加噪声,直到变成纯噪声
  2. 反向扩散:训练 AI 学习从噪声中恢复图片的过程
  3. 生成时:从随机噪声开始,逐步"去噪",生成图片

1.3 阿里云百炼的图像模型

本章节使用的是阿里云百炼的 wanx2.1-t2i-turbo 模型,它的特点是:

  • 生成速度快(turbo=加速版)
  • 中文理解好
  • 生成质量不错

二、ImageModel 核心概念

2.1 ImageModel 接口

在 Spring AI 中,ImageModel 是图像生成的核心接口:

// ImageModel 是 AI 图像生成的入口
// 类似 ChatModel 对话模型的定位
public interface ImageModel {
    // 根据文字描述生成图片
    ImageResponse call(ImagePrompt prompt);
}

2.2 ImagePrompt

ImagePrompt 是图像生成的请求对象:

// 创建图像生成请求
ImagePrompt prompt = new ImagePrompt(
    "一只可爱的橘猫",  // 用户输入的描述
    options            // 可选的参数配置(图片数量、尺寸等)
);

2.3 ImageOptions

ImageOptions 包含各种生成参数:

参数说明可选值
model使用的模型wanx2.1-t2i-turbo
size图片尺寸1024x1024, 512x512 等
quality生成质量standard, hd
style风格写实、卡通、水墨等

三、项目代码详解

3.1 控制器代码

package com.atguigu.study.controller;

import com.alibaba.cloud.ai.dashscope.image.DashScopeImageOptions;
import jakarta.annotation.Resource;
import org.springframework.ai.image.ImageModel;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 文本生成图像控制器
 * 展示如何调用 AI 根据文字描述生成图片
 */
@RestController
public class Text2ImageController
{
    // 注入图像生成模型
    // 和 ChatModel 类似,ImageModel 也是通过自动配置注入的
    @Resource
    private ImageModel imageModel;

    /**
     * 文生图主方法
     * 
     * 接口:http://localhost:8009/t2i/image?prompt=小猫咪
     * 
     * @param prompt 图片描述(必填)
     *                越详细,AI生成越符合预期
     * @return 生成成功的图片URL(返回阿里云的临时访问链接)
     */
    @GetMapping(value = "/t2i/image")
    public String image(@RequestParam(name = "prompt", defaultValue = "刺猬") String prompt)
    {
        // 1. 构建图像生成选项
        //    DashScopeImageOptions 是阿里云专用的选项类
        DashScopeImageOptions options = DashScopeImageOptions.builder()
                .withModel("wanx2.1-t2i-turbo")    // 指定使用阿里云的图像生成模型
                // .withSize("1024x1024")          // 可以设置图片尺寸,默认1024x1024
                // .withStyle("<style>")           // 可以设置风格
                // .withN(1)                       // 生成数量,默认1张
                .build();

        // 2. 创建图像生成请求
        //    ImagePrompt 接受两个参数:
        //    - 第一个:用户输入的文本描述(prompt)
        //    - 第二个:生成选项(可省略)
        ImagePrompt imagePrompt = new ImagePrompt(prompt, options);

        // 3. 调用模型生成图片
        //    返回值是 ImageResponse 对象
        ImageResponse response = imageModel.call(imagePrompt);

        // 4. 从结果中提取图片 URL
        //    getResult().getOutput().getUrl() 是标准的提取路径
        //    返回的是阿里云百炼的临时图片 URL
        return response.getResult().getOutput().getUrl();
    }
}

3.2 返回结果示例

调用成功后,返回的是一个图片访问链接

https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation...

💡 注意:这个 URL 通常是临时访问链接,也可以通过浏览器进行下载。如果业务需要长期保存,应该由后端下载后再转存到对象存储、本地文件系统或业务自己的媒体服务中。


四、图片生成的优化技巧

4.1 Prompt 编写技巧

// ❌ 简单描述(效果可能一般)
prompt = "一只猫"

// ✅ 详细描述(效果更好)
prompt = "一只可爱的橘猫,胖乎乎的,大眼睛,躺在草地上,阳光明媚,摄影风格,高清"

// ✅ 结构化描述(效果更好)
prompt = """
    主题:一只可爱的橘猫
    姿态:躺着的,懒洋洋的
    环境:绿色草地上,有阳光
    风格:摄影写实风格
    质量:高清,8K
    """

4.2 常用风格关键词

风格英文关键词适用场景
写实风格photorealistic, realistic photo产品图、人物照
卡通风格cartoon, anime, illustration插画、表情包
水墨风格Chinese ink painting, shuimo国风、艺术创作
油画风格oil painting艺术画作
3D风格3D render, C4D创意设计

五、本章小结

5.1 核心概念

概念说明
ImageModel图像生成模型接口
ImagePrompt图像生成的请求对象
DashScopeImageOptions阿里云图像模型配置项
wanx2.1-t2i-turbo阿里云文生图模型

5.2 使用流程

1. 准备文字描述(prompt)
2. 创建 ImageOptions 配置参数
3. 创建 ImagePrompt 请求
4. 调用 ImageModel.call()
5. 从响应中提取 URL

5.3 拓展应用

在完整应用里,文生图常被包装成工具:

  • Agent 根据用户描述决定是否调用生成图片工具
  • 图片生成结果再作为 URL 或媒体对象返回给前端
  • 与多模态输入一起组成完整工作流

本章重点

  1. 理解 Text to Image 的基本原理
  2. 掌握 ImageModel 的使用方法
  3. 学会编写高效的 prompt

下章剧透(s10):

学会了生成图片,下一章我们将学习 Text to Voice——让 AI 把文字变成语音!


💡 TIP:图像生成与多模态的关系

本章聚焦的是 文本生成图像。但在实际项目里,图像能力通常有两类:

能力类型说明
图像生成根据文字描述生成图片
图像理解把图片作为输入,让模型识别内容
Agent 工具化把图像生成包装成工具,交给 Agent 自主决定是否调用

所以本章学会 ImageModel 之后,后续就可以自然衔接到多模态和 Agent 场景。


📝 编辑者:Flittly
📅 更新时间:2026年4月
🔗 相关资源阿里云文生图 API | Spring AI Image