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

第九章 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 生成:
bash 复制代码
  /_/\  
 ( 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 是图像生成的核心接口:

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

2.2 ImagePrompt

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

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

2.3 ImageOptions

ImageOptions 包含各种生成参数:

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

三、项目代码详解

3.1 控制器代码

kotlin 复制代码
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 返回结果示例

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

ruby 复制代码
https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation...

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


四、图片生成的优化技巧

4.1 Prompt 编写技巧

ini 复制代码
// ❌ 简单描述(效果可能一般)
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 使用流程

markdown 复制代码
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

相关推荐
Flittly2 小时前
【SpringAIAlibaba新手村系列】(10)Text to Voice 文本转语音技术
java·spring boot·agent
JoshRen2 小时前
springboot之集成Elasticsearch
spring boot·后端·elasticsearch
诸葛大钢铁2 小时前
Java实现Excel文件合并
java·windows·excel
黎明丶之前2 小时前
Spring Cloud Gateway 升级与 Bucket4j 限流实践
java·spring cloud
洛卡卡了2 小时前
别人开盲盒我开源码:我的 Claude Code 宠物是怎么变成金色传说龙的
agent·ai编程·claude
程序员木圭2 小时前
05-告别逻辑混乱!Java 流程控制让代码学会"判断和循环"
java·后端
MmeD UCIZ2 小时前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
ward RINL2 小时前
Spring boot启动原理及相关组件
数据库·spring boot·后端
yaaakaaang2 小时前
三、抽象工厂模式
java·抽象工厂模式