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

<三>Sping-AI alibaba 文生图

环境和配置请看<二>Sping-AI alibaba 入门-记忆聊天及持久化
源代码:https://github.com/springaialibaba/spring-ai-alibaba-examples/blob/main/spring-ai-alibaba-image-example/dashscope-image/src/main/java/com/alibaba/cloud/ai/example/image/dashscope/controller/DashScopeImageController.java
这里我只是给一个解释版本,并稍微修改了一下
git:https://gitee.com/Yee99/spring-ai-alibaba-demo

Controller

@RestController
@RequestMapping("/image")
public class ImageController {// 注入的图像生成模型,用于调用AI生成图片的核心功能,在 org.springframework.ai.image.*包下private final ImageModel imageModel;// 默认提示语,用于基础图像生成场景,可不要//private static final String DEFAULT_PROMPT = "为人工智能生成一张富有科技感的图片!";// 构造器注入ImageModel实例public ImageController(ImageModel imageModel) {this.imageModel = imageModel;}// 通过单个提示词生成1张图片@GetMapping("/signalImage")public void image(HttpServletResponse response,@RequestParam(value = "prompt") String prompt) {// 使用提示词生成图片ImageResponse imageResponse = imageModel.call(new ImagePrompt(prompt));// 提取生成的图片URLString imageUrl = imageResponse.getResult().getOutput().getUrl();try {// 将图片URL转换为可读流URL url = URI.create(imageUrl).toURL();InputStream in = url.openStream();// 设置响应头为PNG格式response.setHeader("Content-Type", MediaType.IMAGE_PNG_VALUE);// 写出图片字节到HTTP响应输出流response.getOutputStream().write(in.readAllBytes());response.getOutputStream().flush();} catch (IOException e) {// IO异常处理:设置500错误状态码response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);}}/*** 通过单个提示词生成多张图片*/// 多图生成接口:GET请求,路径为/multiPrompt@GetMapping("/multiImage")public ResponseEntity<Collection<String>> generateImageWithMultiPrompt(@RequestParam(value = "prompt") String prompt,// 图片数量参数,默认生成2张@RequestParam(defaultValue = "2") int count) {// 创建图片生成选项,指定生成数量ImageOptions options = ImageOptionsBuilder.builder().N(count).build();// 调用模型生成图片ImageResponse response = imageModel.call(new ImagePrompt(prompt, options));// 提取所有图片URL组成集合返回Set<String> imageSet = response.getResults().stream().map(result -> result.getOutput().getUrl()).collect(Collectors.toSet());return ResponseEntity.ok(imageSet);}/*** 多条件安全生成图片*/// 多条件生成接口:GET请求,路径为/multipleConditions@GetMapping("/multipleConditions")public ResponseEntity<?> multipleConditions(// 主题参数,默认值为"一只会编程的猫"@RequestParam(value = "subject", defaultValue = "一只会编程的猫") String subject,// 环境参数,默认值为"办公室"@RequestParam(value = "environment", defaultValue = "办公室") String environment,// 图片高度参数,默认1024像素@RequestParam(value = "height", defaultValue = "1024") Integer height,// 图片宽度参数,默认1024像素@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));// 返回生成的第一张图片的URLreturn ResponseEntity.ok(response.getResult().getOutput().getUrl());} catch (Exception e) {// 异常处理:返回包含错误信息的500响应return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("error", "图像生成失败","message", e.getMessage(),"timestamp", LocalDateTime.now()));}}}

注意:

  • 如果使用signalImage,但是让它生成两张图片的时候,仍旧生成一张图片,并且融合你描述的两个图片
  • http://localhost:8080/image/signalImage?prompt=生成两张图片,一张是小猫,一张是小狗在这里插入图片描述
http://www.dtcms.com/a/267532.html

相关文章:

  • Cursor/VScode ,点击运行按钮,就打开新的终端,如何设置为在当前终端运行文件而不是重新打开终端----一招搞定篇
  • 数字孪生技术引领UI前端设计新潮流:虚拟现实的深度集成
  • 在sf=0.1时测试fireducks、duckdb、polars的tpch
  • OpenLayers 设置线段样式
  • 深入学习c++之---AVL树
  • 支持零样本和少样本的文本到语音48k star的配音工具:GPT-SoVITS-WebUI
  • 完成ssl不安全警告
  • DQL-6-分页查询
  • Redis的编译安装
  • PVE DDNS IPV6
  • 超详细yolo8/11-detect目标检测全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解
  • Altium Designer使用教程 第一章(Altium Designer工程与窗口)
  • ESXi 8.0 SATA硬盘直通
  • python-字符串
  • 量化可复用的UI评审标准(试验稿)
  • OPENPPP2 VDNS 核心域模块深度解析
  • 电源管理芯片(PMIC) 和 电池管理芯片(BMIC)又是什么?ING
  • webpack+vite前端构建工具 -11实战中的配置技巧
  • 合肥工会入会的注意事项和常见问答
  • springBoot接口层时间参数JSON序列化问题,兼容处理
  • Modbus_TCP_V4 客户端
  • Day52
  • 人工智能-基础篇-18-什么是RAG(检索增强生成:知识库+向量化技术+大语言模型LLM整合的技术框架)
  • ES6-in 的用法
  • Apollo自动驾驶系统中Planning(路径规划)模块的架构设计和核心逻辑
  • leetcode86.分隔链表
  • 1. 两数之和 (leetcode)
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_timestamps
  • 【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
  • CSS 文字浮雕效果:巧用 text-shadow 实现 3D 立体文字