图片压缩代码和实际操作页面

先编写一个小工具类

package com.ai157.aigc.utils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
public class MyFileUtils {public static File convert(MultipartFile multipartFile) throws IOException {File file = new File(multipartFile.getOriginalFilename());try (InputStream is = multipartFile.getInputStream()) {org.apache.commons.io.FileUtils.copyInputStreamToFile(is, file);}return file;}
}

从前端页面上传上来,后端处理类

package com.ai157.aigc.controller;
import com.ai157.aigc.utils.MyFileUtils;
import org.apache.commons.io.FileUtils;
import org.csource.common.MyException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Base64;@RestController
public class FileSmallController {@PostMapping("/api/file/small")public String handleFileUpload(@RequestParam("file") MultipartFile file,@RequestParam("scale") Float scale,@RequestParam("fileType") String fileType) {try {scale = scale/100;//由于我的界面上输入的是百分比数据,所以要除以100ByteArrayOutputStream  byteArrayOutputStream = new ByteArrayOutputStream();compress(MyFileUtils.convert(file),byteArrayOutputStream,scale);return Base64.getEncoder().encodeToString( byteArrayOutputStream.toByteArray());} catch (IOException e) {e.printStackTrace();} catch (Exception e) {throw new RuntimeException(e);}return "File uploaded successfully!";}/***这个是处理方法*/public static void compress(File srcFile, ByteArrayOutputStream byteArrayOutputStream, float scale) {scale = (float) Math.sqrt(scale);try {BufferedImage srcImage = ImageIO.read(srcFile);int width = (int) (srcImage.getWidth() * scale);int height = (int) (srcImage.getHeight() * scale);BufferedImage destImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);destImage.getGraphics().drawImage(srcImage.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH), 0, 0, null);ImageIO.write(destImage, "png", byteArrayOutputStream);} catch (IOException e) {e.printStackTrace();}}
}

注意下:

1、scale = scale/100;这个为什么除以100,由于前端上传的不是小数,是百分比数值。

2、由于长度和宽度是等比缩小,如果长度是a,宽度是b,那(ax)*(bx)= scale*a*b

所以x平方等于scale。所以在计算前要开方下。

3、由于前端是以图片的方式渲染,所以以Base64的图片数据输出。

实际操作界面请访问以下页面

gpt114,伴你左右!

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

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

相关文章

金蝶云苍穹-插件开发(一)加载数据

前言 此系列博客是进行金蝶云苍穹开发时的插件开发的教程,一是在明年要是还要参加软件杯金蝶A6赛题的话,可以看此系列教程的博客来进行复习,同时如果要是我实验室的学弟学妹要参加的话,我这个系列的博客可以给他们提供学习参考&a…

Spark SQL----内置函数Bitwise Functions

Spark SQL----内置函数Bitwise Functions Bitwise Functions 例子: -- & SELECT 3 & 5; ------- |(3 & 5)| ------- | 1| --------- ^ SELECT 3 ^ 5; ------- |(3 ^ 5)| ------- | 6| --------- bit_count SELECT bit_count(0); -----------…

谷粒商城学习-10-docker安装mysql

文章目录 一,拉取MySQL镜像1,搜索MySQL的Docker镜像2,拉取MySQL镜像3,查看已经拉取的镜像 二,创建、启动MySQL容器1,使用docker run创建启动容器2,使用docker ps查看运行状态的容器3&#xff0c…

SpringBoot新手快速入门系列教程:基于JPA的一个Mysql简单读写例子

现在我们来做一个简单的读写Mysql的项目 1,先新建一个项目,我们叫它“HelloJPA”并且添加依赖 2,引入以下依赖: Spring Boot DevTools (可选,但推荐,用于开发时热部署)Lombok(可选&#xff0c…

深度解析:机器学习与深度学习的关系与区别

一、前言 在人工智能领域,机器学习与深度学习常常被提及并广泛应用。虽然它们在本质上都是通过数据训练模型以进行预测或分类,但两者之间存在着显著的区别和联系。本文将深入解析机器学习与深度学习的关系与区别,帮助读者更好地理解和应用这…

poetry使用经验汇总

什么是poetry Poetry 是一个 Python 依赖管理和打包工具,它旨在解决 Python 项目中常见的依赖问题,提供更简洁、更可靠的依赖管理方式。以下是 Poetry 的一些主要功能和特点的总结: 依赖解析:Poetry 使用 pyproject.toml 文件来管理项目依赖,它能够自动解析依赖关系,确保…

【C++】 解决 C++ 语言报错:Use of Uninitialized Variable

文章目录 引言 使用未初始化的变量(Use of Uninitialized Variable)是 C 编程中常见且危险的错误之一。它通常在程序试图使用尚未赋值的变量时发生,导致程序行为不可预测,可能引发运行时错误、数据损坏,甚至安全漏洞。…

掌握 IPython 中的 %%bash 魔法命令:深入探索与实践

IPython 是一个强大的交互式 Python 解释器,它提供了丰富的功能来增强开发体验。其中一个非常实用的功能是 IPython 的“魔法命令”(magic commands),这些命令以 %% 开头,用于执行特定的操作或改变 IPython 的行为。%%…

SpringMVC:SpringMVC执行流程

文章目录 一、介绍二、什么是MVC 一、介绍 Spring MVC 是一种基于Java的Web框架,它采用了MVC(Model - View - Controller)设计模式,通过吧Model、View和Controller分离,将Web层进行职责解耦,把复杂的Web应…

NAS 必备导航页 Homepage 外观简约但功能丰富

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 NAS 上的应用部署多了之后,不同的服务对应的端口很难记住,在内网中使用,一般也不会绑定域名。 此时就需要有一个导航页将 NAS 上部署的所有服务都罗列出来,方便我们直接点击访问对应的服务。 今天给大家介绍的…

【HICE】转发服务器实验

1.在本地主机上操作 2.在客户端操作设置主机的IP地址为dns 3.测试,客户机是否能ping通

anaconda中下载压缩包并用conda安装包

有时直接conda安装包时会出错;报错PackagesNotFoundError: The following packages are not available from current channels 比如 conda install -y bioconda::ucsc-gtftogenepred #直接安装报错 #直接下载压缩包安装https://blog.csdn.net/weixin_45552562/ar…

C++初学者指南-4.诊断---基础:警告和测试

C初学者指南-4.诊断—基础知识:警告和测试 文章目录 C初学者指南-4.诊断---基础知识:警告和测试1. 术语和技术记住:使用专用类型! 2.编译器警告Gcc/CLang 编译器选项MS Visual Studio 编译器选项 3.断言运行时断言静态断言&#x…

macOS查看系统日志的方法

1、command空格键打开搜索框,输入‘控制台’并打开 2、选择日志报告,根据日期打开自己需要的文件就可以

基础物理-测量1(长度)

引言 科学和工程学基于测量和比较。因此,我们需要制定关于如何测量和比较事物的规则,并且需要实验来建立这些测量和比较的单位。 国际标准单位 1971年,第十四届国际计量大会选定了七个量作为基本量,表中列出了其中三个。 Quan…

c++习题06-ljc的储蓄计划

目录 一,问题 二,思路 1,思路1 2,思路2 三,代码 1,思路1代码 2,思路2代码 四,用例输入输出 一,问题 二,思路 1,思路1 定义变量&#x…

统计是一门艺术(非参数假设检验)

1.定义 当总体分布未知,那么就需要一种与分布具体数学形式无关的统计推断方法,称为非参数方法 只能利用样本中的一般信息包括位置和次序关系等 稳健性强 2.符号检验 考虑问题: 小样本情况: 以概率为1/2的二项分布是对称的 两…

找事,给年轻一代的就业解惑书

在这个快节奏、高压力的现代社会,我常常被一种声音所包围:“勤劳节俭致富”,仿佛这是通往幸福生活的唯一道路。然而,当我停下脚步,深入思考这背后的逻辑,不禁会发现,这不仅仅是对经济行为的简单…

剖析DeFi交易产品之UniswapV3:交易路由合约

本文首发于公众号:Keegan小钢 SwapRouter 合约封装了面向用户的交易接口,但不再像 UniswapV2Router 一样根据不同交易场景拆分为了那么多函数,UniswapV3 的 SwapRouter 核心就只有 4 个交易函数: exactInputSingle:指…

Java技术栈总结:kafka篇

一、# 基础知识 1、安装 部署一台ZooKeeper服务器;安装jdk;下载kafka安装包;上传安装包到kafka服务器上:/usr/local/kafka;解压缩压缩包;进入到config目录,修改server.properties配置信息: #…