第九章 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) ,核心原理是:
- 正向扩散:把一张图片逐渐添加噪声,直到变成纯噪声
- 反向扩散:训练 AI 学习从噪声中恢复图片的过程
- 生成时:从随机噪声开始,逐步"去噪",生成图片
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 或媒体对象返回给前端
- 与多模态输入一起组成完整工作流
本章重点:
- 理解 Text to Image 的基本原理
- 掌握 ImageModel 的使用方法
- 学会编写高效的 prompt
下章剧透(s10):
学会了生成图片,下一章我们将学习 Text to Voice——让 AI 把文字变成语音!
💡 TIP:图像生成与多模态的关系
本章聚焦的是 文本生成图像。但在实际项目里,图像能力通常有两类:
| 能力类型 | 说明 |
|---|---|
| 图像生成 | 根据文字描述生成图片 |
| 图像理解 | 把图片作为输入,让模型识别内容 |
| Agent 工具化 | 把图像生成包装成工具,交给 Agent 自主决定是否调用 |
所以本章学会 ImageModel 之后,后续就可以自然衔接到多模态和 Agent 场景。
📝 编辑者:Flittly
📅 更新时间:2026年4月
🔗 相关资源:阿里云文生图 API | Spring AI Image