当前位置: 首页 > news >正文

020-Spring AI Alibaba DashScope Image 功能完整案例 - 指南

本案例将引导您一步步构建一个 Spring Boot 应用,演示如何利用 Spring AI Alibaba 的 Image 模型功能,实现基于文本描述的图像生成。

1. 案例目标

我们将创建一个包含三个核心功能的 Web 应用:

  1. 基本图像生成 (/example/image):使用默认提示词生成一张图像。
  2. 多图像生成 (/example/image/multiPrompt):根据单个提示词生成多张图像。
  3. 多条件图像生成 (/example/image/multipleConditions):根据多个参数(主题、环境、高度、宽度、风格)生成定制化图像。

2. 技术栈与核心依赖

  • Spring Boot 3.x
  • Spring AI Alibaba (用于对接阿里云 DashScope 图像生成模型)
  • Maven (项目构建工具)

在 pom.xml 中,你需要引入以下核心依赖:

com.alibaba.cloud.aispring-ai-alibaba-starter-dashscope1.0.0-M2 org.springframework.bootspring-boot-starter-web
org.springframework.bootspring-boot-dependencies3.3.1pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies2023.0.1.2pomimport

3. 项目配置

在 src/main/resources/application.yml 文件中,配置你的 DashScope API Key。

server:port: 10008
spring:application:name: spring-ai-alibaba-dashscope-image-exampleai:dashscope:api-key: ${AI_DASHSCOPE_API_KEY} # 建议使用环境变量,更安全

重要提示:请将 AI_DASHSCOPE_API_KEY 环境变量设置为你从阿里云获取的有效 API Key。你也可以直接将其写在配置文件中,但这不推荐用于生产环境。

4. 编写 Java 代码

4.1 DashScopeImageApplication.java

Spring Boot 应用程序的主类。

package com.alibaba.cloud.ai.example.image.dashscope;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DashScopeImageApplication {public static void main(String[] args) {SpringApplication.run(DashScopeImageApplication.class, args);}
}

4.2 DashScopeImageController.java

实现图像生成功能的控制器类。

package com.alibaba.cloud.ai.example.image.dashscope.controller;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.ai.image.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/example")
public class DashScopeImageController {private final ImageModel imageModel;private static final String DEFAULT_PROMPT = "为人工智能生成一张富有科技感的图片!";public DashScopeImageController(ImageModel imageModel) {this.imageModel = imageModel;}/*** 基本图像生成功能*/@GetMapping("/image")public void image(HttpServletResponse response) {ImageResponse imageResponse = imageModel.call(new ImagePrompt(DEFAULT_PROMPT));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);}}/*** 生成多张图像*/@GetMapping("/image/multiPrompt")public ResponseEntity> generateImageWithMultiPrompt(@RequestParam(value = "prompt", defaultValue = "一只会编程的猫") String prompt,@RequestParam(defaultValue = "2") int count) {ImageOptions options = ImageOptionsBuilder.builder().N(count).build();ImageResponse response = imageModel.call(new ImagePrompt(prompt, options));Set imageSet = response.getResults().stream().map(result -> result.getOutput().getUrl()).collect(Collectors.toSet());return ResponseEntity.ok(imageSet);}/*** 多条件图像生成*/@GetMapping("/image/multipleConditions")public ResponseEntity multipleConditions(@RequestParam(value = "subject", defaultValue = "一只会编程的猫") String subject,@RequestParam(value = "environment", defaultValue = "办公室") String environment,@RequestParam(value = "height", defaultValue = "1024") Integer height,@RequestParam(value = "width", defaultValue = "1024") Integer width,@RequestParam(value = "style", defaultValue = "生动") String style) {String prompt = String.format("一个%s,置身于%s的环境中,使用%s的艺术风格,高清4K画质,细节精致",subject, environment, style);ImageOptions options = ImageOptionsBuilder.builder().height(height).width(width).build();try {ImageResponse response = imageModel.call(new ImagePrompt(prompt, options));return ResponseEntity.ok(response.getResult().getOutput().getUrl());} catch (Exception e) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("error", "图像生成失败","message", e.getMessage(),"timestamp", LocalDateTime.now()));}}
}

5. 运行与测试

  1. 启动应用:运行你的 Spring Boot 主程序。
  2. 使用浏览器或 API 工具(如 Postman, curl)进行测试

测试 1:基本图像生成

访问以下 URL,使用默认提示词生成一张图像。

http://localhost:10008/example/image

预期响应:直接返回一张 PNG 格式的图像。

测试 2:多图像生成

访问以下 URL,生成多张图像。

http://localhost:10008/example/image/multiPrompt?prompt=一只会编程的猫&count=2

预期响应:返回一个包含两个图像 URL 的集合。

[ "https://example.com/image1.png", "https://example.com/image2.png" ]

测试 3:多条件图像生成

访问以下 URL,使用多个参数生成定制化图像。

http://localhost:10008/example/image/multipleConditions?subject=一只会编程的猫&environment=办公室&height=1024&width=1024&style=生动

预期响应:返回生成的图像 URL。

"https://example.com/generated-image.png"

测试 4:错误处理

当图像生成失败时,系统会返回错误信息。

{ "error": "图像生成失败", "message": "具体错误信息", "timestamp": "2025-01-01T12:00:00" }

6. 实现思路与扩展建议

实现思路

本案例的核心思想是利用 Spring AI Alibaba 的 ImageModel 接口简化图像生成流程。通过这个接口,我们可以:

  • 简化 API 调用:无需直接与 DashScope API 交互,Spring AI Alibaba 封装了所有复杂性。
  • 灵活配置:通过 ImageOptions 可以轻松配置图像生成的各种参数。
  • 错误处理:内置的错误处理机制,使应用更加健壮。

扩展建议

  • 图像风格库:可以创建一个预定义的图像风格库,让用户通过简单的名称选择不同的风格。
  • 图像历史记录:添加数据库支持,保存用户生成的图像历史记录,方便后续查看和管理。
  • 异步处理:对于复杂的图像生成任务,可以实现异步处理,避免长时间阻塞用户请求。
  • 图像编辑功能:集成图像编辑功能,如裁剪、调整大小、添加滤镜等。
  • 用户认证与授权:添加用户认证机制,限制 API 使用频率,防止滥用。
  • 多模型支持:扩展应用以支持多个图像生成模型,让用户可以选择最适合的模型。
http://www.jsqmd.com/news/50011/

相关文章:

  • 2025年上海全铝家居定制生产商 top10 权威推荐榜单
  • 2025年北京离婚房产律所权威推荐榜单:婚姻律所/离婚事务所/婚姻专业律师团队精选
  • 2025年评价高的密植果树拉技塑钢线厂家选购指南与推荐
  • 2025金属复合板厂家哪家好:吉祥金属复合板厂家解读
  • 2025年上海全铝家居定制品牌前十强权威推荐榜单
  • 2025中山留学中介哪家好?优质机构解析
  • 2025ESD静电管的工厂测评-电感工厂实力分析
  • 2025 年 11 月中国水泵厂家权威推荐榜:涵盖管道/消防/多级/自吸/磁力/排污/真空/离心/卧式水泵,匠心制造与高效性能深度解析
  • kubernetes pod是什么?
  • 2025天然气压缩机源头工厂盘点分析
  • 2025并网柜制造厂家排名测评:行业风向尽在掌握
  • 金华门窗定制厂家哪家好?2025门窗定制出口工厂深度剖析
  • 2025年比较好的气体探测最新TOP厂家排名
  • 2025 广东专业音响厂家优选指南:广东天宏声光电科技有限公司 MYART/JBL/LYNX 进口国产演出 / KTV / 会议 / 舞台音响解决方案
  • 聚焦2025PA磨粉机厂家:甄选中国塑料磨粉机厂家
  • 如何通过LabVIEW父类获取其所有子类?
  • 2025 深圳手板制作厂家标杆:深圳市赛达尔手板模型有限公司 CNC/3D 打印 / 塑胶 / 铝合金 / 新能源汽车手板定制指南
  • 优质2025大型卷板机厂家哪家好测评大盘点
  • 2025年评价高的阻燃采样管路实力厂家TOP推荐榜
  • 20256S及目视化管理公司推荐:6S管理目视化公司有哪些清
  • 2025大型制管机厂家哪家好多维度分析
  • 2025年深圳离婚律师事务所权威推荐榜单:股权分割/房产分割律所/离婚房产专业律师团队精选
  • 想找靠谱厂家?2025VOCs监测设备厂家有哪些合集
  • 2025直升飞机灯选哪家好
  • 微高压氧舱厂家推荐:2025微高压氧舱代理加盟哪家好
  • 2025隔音降噪厂家,隔音房厂家盘点分析
  • 2025山东水肥一体化厂家哪家好?水肥一体机生产厂家揭秘
  • 聚焦2025:LE audio蓝牙测试适配器厂家实力榜单
  • 2025年广东磁铁公司权威推荐榜单:手机磁铁/耐高温磁铁/圆形磁铁源头公司精选
  • 2025质量好服务好的门窗厂家推荐分析