SpringAI Alibaba实战文生图

1️⃣  前置准备:搭建开发环境与服务配置🚀

🔧 1.1 环境要求

        JDK 17+(推荐 JDK 21)、Spring Boot 3.x+(本案例使用 3.3.4)、阿里云百炼大模型服务 API Key。需在阿里云控制台完成服务开通并获取有效 API Key,用于后续身份验证。

 

🛠️ 1.2 Maven 依赖配置

        pom.xml中添加 Spring Boot Web 依赖、Spring AI Alibaba Starter,并配置 Spring Milestone 仓库以获取最新组件:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version>
</parent>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId><version>1.0.0.1</version></dependency>
</dependencies><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository>
</repositories>

🔑 1.3 配置文件设置

        在application.yml中配置服务端口及阿里云 API Key:

server:port: 8080spring:ai:dashscope:api-key: "sk-xxx API_KEY"

 

2️⃣ 核心功能实现:基于 Spring AI 的文生图接口设计🎨

🖼️ 2.1  单图生成:获取图片 URL

接口设计

  GET /dashscope/image/generateImage,通过固定提示词 “为努力学习的自己生成一张励志海报” 调用模型,返回生成图片的 URL。

代码逻辑

        使用ImageModel注入模型实例,构造ImagePrompt并调用call()方法,校验返回的 URL 有效性后封装至响应体。若 URL 为空,抛出运行时异常提示生成失败。

example:

    /*** 返回生成图片URL* @return*/@GetMapping("/generateImage")public BaseResponse<String> generateImage() {ImagePrompt prompt = new ImagePrompt(PROMOTE);ImageResponse imageResponse = imageModel.call(prompt);String imageUrl = imageResponse.getResult().getOutput().getUrl();if (StrUtil.isEmpty(imageUrl)) {throw new RuntimeException("Image generation timeout or failed");}return ResultUtils.success(imageUrl);}

 

🖼️2.2  图片显示:流式传输图片内容

接口设计

   GET /dashscope/image,直接将生成的图片以流形式返回给客户端,支持浏览器直接渲染。

代码逻辑

        通过模型调用获取图片 URL 后,使用URLInputStream读取远程图片流,设置响应头为IMAGE_PNG_VALUE,将字节流写入HttpServletResponse。捕获 IO 异常并返回 500 状态码,确保错误处理的健壮性。

example:

    /*** 返回显示图片* @param response*/@GetMapping("/image")public void image(HttpServletResponse response) {ImagePrompt imagePrompt = new ImagePrompt(PROMOTE);ImageResponse imageResponse = imageModel.call(imagePrompt);String imageUrl = imageResponse.getResult().getOutput().getUrl();try {URL url = URI.create(imageUrl).toURL();InputStream in = url.openStream();response.setHeader("Content-Type", MediaType.IMAGE_PNG_VALUE);response.getOutputStream().write(in.readAllBytes());response.getOutputStream().flush();} catch (IOException e) {response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);}}

 

🖼️2.3  多图生成:批量生成图片集合

接口设计

  POST /dashscope/image/generate/multiImage,接收包含提示词和图片数量的请求体,支持生成 1-10 张图片。

代码逻辑

        校验输入参数合法性(图片数量范围、提示词非空),通过ImageOptionsBuilder构建批量生成选项,构造带选项的ImagePrompt。调用模型后解析ImageResponse,提取所有结果的 URL 并以集合形式返回,满足批量生成需求。

 /*** 返回生成多张图片URL* @param imageRequest* @return*/@PostMapping("/generate/multiImage")public BaseResponse<Set<String>> generateMultiImage(@RequestBody ImageRequest imageRequest) {String imagePrompt = imageRequest.getImagePrompt();int imageCount = imageRequest.getImageCount();if (imageCount < 1 || imageCount > 10) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}if (imagePrompt != null && StrUtil.isBlank(imagePrompt)) {throw new BusinessException(ErrorCode.PARAMS_ERROR,  "请输入图片描述提示词");}ImageOptions imageOptions = ImageOptionsBuilder.builder().N(imageCount).build();
//       # ImagePrompt 传递参数是 -- String 类型和 -- ImageOptions 类型ImagePrompt result = new ImagePrompt(imagePrompt, imageOptions);ImageResponse imageResponse = imageModel.call(result);Set<String> collect = imageResponse.getResults().stream().map(res -> res.getOutput().getUrl()).collect(Collectors.toSet());return ResultUtils.success(collect);}

3️⃣ 总结 📝

        Spring AI 提供的ImageModel抽象层简化了与阿里云百炼模型的交互,通过统一接口实现不同 AI 服务的无缝切换,适合快速落地文生图场景。

        应用场景可扩展至电商海报生成、营销图片批量制作、个性化图片定制等业务场景,结合用户输入动态生成视觉内容,提升产品智能化体验。

        通过以上实践,开发者可基于 Spring AI Alibaba 快速构建稳定、可扩展的文生图服务,充分利用 Java 生态与阿里云大模型的协同优势,实现 AI 功能的高效落地。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战二:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…

Kotlin List 操作全面指南

在传统 Java 开发 List 相关的 API 中&#xff0c;有着样板代码冗长、缺乏链式调用、空安全等问题。 Kotlin 这门语言 为 List 提供了丰富的扩展函数&#xff0c;这些函数大大简化了集合操作&#xff0c;解决了传统 Java 集合 API 中的许多痛点。 一、基础操作 1. 创建 List …

硬盘寻址全解析:从 CHS 三维迷宫到 LBA 线性王国

在数字存储的底层世界&#xff0c;硬盘如同一个巨大的 “数据图书馆”&#xff0c;而寻址模式就是决定如何高效找到 “书籍”&#xff08;扇区&#xff09;的核心规则。从早期基于物理结构的 CHS&#xff08;柱面 - 磁头 - 扇区&#xff09;三维寻址&#xff0c;到现代抽象化的…

oracle 11g ADG备库报错ORA-00449 lgwr unexpectedly分析处理

问题背景 昨天遇到群友提问&#xff0c;遇到ADG备库挂了的情况 数据版本:11.2.0.4 操作系统:Centos7.9 环境&#xff1a;ADG主备库&#xff0c;主库为RAC&#xff0c;备库也是RAC 具体报错ORA-00449以及ORA-04021 看样子是LGWR挂了&#xff0c;还有个锁等待。 问题分析 先…

Python——day46通道注意力(SE注意力)

一、 什么是注意力 注意力机制是一种让模型学会「选择性关注重要信息」的特征提取器&#xff0c;就像人类视觉会自动忽略背景&#xff0c;聚焦于图片中的主体&#xff08;如猫、汽车&#xff09;。 transformer中的叫做自注意力机制&#xff0c;他是一种自己学习自己的机制&…

入门AJAX——XMLHttpRequest(Post)

一、前言 在上篇文章中&#xff0c;我们已经介绍了 HMLHttpRequest 的GET 请求的基本用法&#xff0c;并基于我提供的接口练习了两个简单的例子。如果你还没有看过第一篇文章&#xff0c;强烈建议你在学习完上篇文章后再学习本篇文章&#xff1a; &#x1f517;入门AJAX——XM…

​BEV和OCC学习-3:mmdet3d 坐标系

目录 坐标系 转向角 (yaw) 的定义 框尺寸的定义 与支持的数据集的原始坐标系的关系 KITTI Waymo NuScenes Lyft ScanNet SUN RGB-D S3DIS 坐标系 坐标系 — MMDetection3D 1.4.0 文档https://mmdetection3d.readthedocs.io/zh-cn/latest/user_guides/coord_sys_tuto…

Redis高可用架构

概述 Redis作为常用的缓存中间件&#xff0c;因其高性能&#xff0c;丰富的数据结构&#xff0c;使用简单等&#xff0c;常被用在需要一定高性能的To C业务场景中&#xff0c;如「秒杀场景」「用户信息中心」「帖子」「群聊」等等大家常见的业务场景中&#xff0c;以提高服务的…

使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件

Nuget下载之后记得要先引用下面的 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" <!-- 鼠标事件 --> <i:EventTrigger EventName"MouseEnter"/> <!-- 鼠标进入 --> <i:EventTrigger EventName"MouseLeave"/&g…

敏捷开发中如何避免过度加班

在敏捷开发过程中避免过度加班&#xff0c;需要明确敏捷原则、合理规划迭代任务、加强团队沟通、优化流程效率、设定合理的工作负荷、注重团队士气和成员健康。明确敏捷原则&#xff0c;即保证可持续发展的步调&#xff0c;避免频繁地变更需求、过度承诺任务量。合理规划迭代任…

JSON解析崩溃原因及解决方案

问题记录&#xff1a; /************************************************| * 描述: 将ID124执行NFC操作-JSON解析为结构体* 函数名: cJSON_ID124_to_struct* 参数[ I]: *json_string 待解析的指针* 参数[II]: *wireless_rxd 结构体指针* 返回: 成功返回0 失…

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…

Edge(Bing)自动领积分脚本部署——基于python和Selenium(附源码)

微软的 Microsoft Rewards 计划可以通过 Bing 搜索赚取积分&#xff0c;积分可以兑换礼品卡、游戏等。每天的搜索任务不多&#xff0c;我们可以用脚本自动完成&#xff0c;提高效率&#xff0c;解放双手。 本文将手把手教你如何部署一个自动刷积分脚本&#xff0c;并解释其背…

前端基础之《Vue(19)—状态管理》

一、什么是状态管理 1、Vue版本问题 Vue2 Vuex3 Vue3 Vuex4 / Pinia2 在使用任何技术的时候&#xff0c;都先要去搜索一下版本&#xff0c;你的版本和脚手架环境是否兼容。 2、安装Vuex yarn add vuex3.6.2 3、状态管理 状态&#xff0c;在应用程序中表示数据&#xff0c…

【图像处理基石】如何进行图像畸变校正?

图像畸变校正常用于计算机视觉、摄影测量学和机器人导航等领域&#xff0c;能够修正因镜头光学特性或传感器排列问题导致的图像失真。下面我将介绍几种常用的图像畸变校正算法&#xff0c;并提供Python实现和测试用例。 常用算法及Python实现 1. 径向畸变校正 径向畸变是最常…

蓝桥杯_DS18B20温度传感器---新手入门级别超级详细解析

目录 一、引言 DS18B20的原理图 单总线简介&#xff1a; ​编辑暂存器简介&#xff1a; DS18B20的温度转换与读取流程 二、代码配置 maic文件 疑问 关于不同格式化输出符号的使用 为什么要rd_temperature()/16.0&#xff1f; onewire.h文件 这个配置为什么要先读lo…

MySQL的并发事务问题及事务隔离级别

一、并发事务问题 1). 赃读&#xff1a;一个事务读到另外一个事务还没有提交的数据。 比如 B 读取到了 A 未提交的数据。 2). 不可重复读&#xff1a;一个事务先后读取同一条记录&#xff0c;但两次读取的数据不同&#xff0c;称之为不可重复读。 事务 A 两次读取同一条记录&…

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…

练习:对象数组 4

定义数组存储 4 个女朋友的对象。女朋友的属性&#xff1a;姓名、年龄、性别、爱好&#xff1b;要求1&#xff1a;计算出四个女朋友的平均年龄&#xff1b;要求2&#xff1a;统计年龄比平均值低的女朋友有几个&#xff1f;并把他们的所有信息打印出来。 代码&#xff1a; //对…

React Hooks 基础指南

React Hooks 是 React 16.8 引入的重要特性&#xff0c;它允许开发者在函数组件中使用状态和其他 React 特性。本文将详细介绍 6 个最常用的 React Hooks。 1. useState useState 是最常用的 Hook&#xff0c;用于在函数组件中添加 state。 import React, { useState } from…