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

简介: 本文介绍 Spring AI 中的文生图能力,围绕 ImageModel、ImagePrompt 与阿里云百炼图像模型展开,演示如何根据文字描述生成图片链接,并结合 Prompt 编写技巧与参数配置,帮助开发者提升生成效果与落地能力。

第九章 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

目录
相关文章
|
16天前
|
人工智能 JavaScript Java
【SpringAIAlibaba新手村系列】(10)Text to Voice 文本转语音技术
本文围绕 Spring AI Alibaba 1.1.2.2 的文本转语音实现展开,记录了基于 DashScopeAudioSpeechModel 与 stream() 的可运行方案。文章重点说明了模型、音色、输出格式与流式拼接音频文件的关键细节。
183 6
|
18天前
|
人工智能 Java API
【SpringAIAlibaba新手村系列】(5)Prompt 提示词基础与多种消息类型
本章详解Spring AI 1.1.2中Prompt核心机制:以System/User/Assistant/Tool四类消息构建结构化提示,强调“角色决定语义”;涵盖多模型配置、链式API与底层Message组装两种实践方式,并给出系统消息设计最佳实践。
289 7
|
19天前
|
人工智能 前端开发 Java
【SpringAIAlibaba新手村系列】(4)流式输出与响应式编程
本文围绕 Spring AI 中的流式输出与响应式编程展开,重点解释了传统一次性响应与流式返回的差异,以及 Flux 在异步数据流中的核心作用。文章结合 ChatModel.stream() 与 ChatClient 的多种代码示例,说明如何实现 AI 内容的边生成边返回,并帮助读者理解流式调用在用户体验、性能和长文本场景中的实际价值。
405 4
【SpringAIAlibaba新手村系列】(4)流式输出与响应式编程
|
17天前
|
人工智能 JSON Java
【SpringAIAlibaba新手村系列】(7)结构化输出与对象映射
本文详解 Spring AI 结构化输出功能,通过 Java Record 与 .entity() 方法,实现 AI 的 JSON 响应自动映射为 Java 对象,解决纯文本难以集成的问题。文中还对比了 Lambda 写法并提供 Prompt 设计最佳实践。
159 3
|
15天前
|
NoSQL Java 数据库
【SpringAIAlibaba新手村系列】(11)Embedding 向量化与向量数据库
本文围绕 Embedding 与向量数据库展开,讲解了文本向量化、相似度检索和 VectorStore 的基本用法,并结合 SimpleVectorStore 示例说明了 Spring 中自动装配与手动注册 Bean 的区别,为后续学习 RAG 打下基础。
239 4
【SpringAIAlibaba新手村系列】(11)Embedding 向量化与向量数据库
|
人工智能 JavaScript Java
【SpringAIAlibaba新手村系列】(1)初识 Spring AI Alibaba 框架
本文介绍了SpringAIAlibaba框架的基本概念和使用方法。作为Spring官方AI框架的阿里云实现版本,它简化了Java开发者调用AI模型的过程。文章详细讲解了核心概念如ChatModel、ChatClient,以及阿里云百炼平台的功能。通过HelloWorld项目示例,展示了如何配置APIKey、编写控制层代码,实现普通调用和流式输出两种AI交互方式。重点阐述了SpringAI与SpringAIAlibaba的关系,以及自动配置机制的工作原理,帮助开发者快速上手这一框架。
1452 4
|
存储 人工智能 Java
【SpringAIAlibaba新手村系列】(3)ChatModel 与 ChatClient 的深度对比
本章深度解析 Spring AI 中 `ChatModel`(底层接口)与 `ChatClient`(高级封装)的本质区别:前者如“手动挡”,精准控制但需写大量样板代码;后者似“智能点餐机”,链式调用、支持系统提示、模板、工具调用等,开发高效。初学者推荐优先使用 `ChatClient`。
294 0
【SpringAIAlibaba新手村系列】(3)ChatModel 与 ChatClient 的深度对比
|
11天前
|
人工智能 运维 Java
【SpringAIAlibaba新手村系列】(12)RAG 检索增强生成技术
本文深入探讨 RAG 技术在 AiOps 场景中的应用,以基于 ops.txt 构建运维知识库为例,讲解了如何通过将文本切分、向量化并存入向量数据库,实现 AI 故障查询。内容涵盖 EmbeddingModel、VectorStore 的基本概念,以及利用 Redis 的 SETNX 机制防止知识库重复导入的工程实践。核心在于让 AI 结合外部知识库,更准确地回答运维问题。
165 0
|
4天前
|
人工智能 NoSQL Java
【SpringAIAlibaba新手村系列】(8)持久化会话与 Redis 内存管理
本文详解 Spring AI 的会话记忆机制,从内存版 MemorySaver 到 Redis 版 RedisSaver,实现 AI 对话的上下文连续性。文章以 ReactAgent 为核心,讲解如何通过 threadId 管理会话线程,并将 Agent 状态持久化到 Redis 中。
173 4
|
10天前
|
人工智能 JSON 编解码
【SpringAIAlibaba新手村系列】(15)MCP Client 调用本地服务
本章从 MCP Client 视角说明如何连接上一章提供的本地服务,并把远端工具接入 ChatClient。重点讲解 Streamable-HTTP 配置、ToolCallbackProvider 的注入方式,以及模型如何通过 JSON-RPC 消息完成工具调用与结果回传。
187 21

热门文章

最新文章

下一篇
开通oss服务