
springboot 图片大小压缩
发布日期:2021-05-07 22:42:01
浏览次数:12
分类:精选文章
本文共 4047 字,大约阅读时间需要 13 分钟。
图片大小压缩
application.properties配置文件
#后端接收图片大小spring.servlet.multipart.max-file-size=50MBspring.servlet.multipart.max-request-size=50MB
java工具类
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.awt.image.ImageObserver;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.InputStream;//** * 请求调用方法 * gb * * @param fromPath1 byte直接文件图片 * @return 剪切后的byte文件 */ public static byte[] imageSet(byte[] fromPath1) throws Exception { return imageChangeSize(fromPath1, 470, 635); } /** * @param data byte类型图片 * @param max_wi 图片修改后最大的宽 * @param max_he 图片修改后最大的高 * @return * @throws Exception * @Description 更改图片内容的大小 byte【】 类型 */ public static byte[] imageChangeSize(byte[] data, int max_wi, int max_he) throws Exception { ImageIO io = null; float rate = 1; /*图片的原始宽 120*/ int oldwi; /*图片的原始高 120*/ int oldhe; /*图片修改后的宽 0*/ int new_wi = 0; /*图片修改后的高 0*/ int new_he = 0; /*拿到byte图片*/ InputStream is = new ByteArrayInputStream(data); BufferedImage bufImg = ImageIO.read(is); /*图片的原始宽度*/ oldwi = bufImg.getWidth(); /*图片的原始高度*/ oldhe = bufImg.getHeight(); // rate = (float) oldwi / (float) oldhe; /*如果图片的原宽大于最大宽度,并且原高小于等于最大高度。则证明图片过宽了,将图片宽度设置为最大宽度,此时需要等比例减小高度*/ if (oldwi > max_wi && oldhe <= max_he) { new_wi = max_wi; new_he = new Float((float) new_wi / rate).intValue(); /*如果图片的原宽和原高都大于或者都小于其所对应的最大值,则以任意一方为主(此处以最大高度为主)*/ } else if (oldwi >= max_wi && oldhe >= max_he || oldwi <= max_wi && oldhe <= max_he) { new_he = max_he; new_wi = new Float(new_he * rate).intValue(); /*如果图片的原宽小于于最大宽度,并且原高大于等于最大高度。则证明图片过高了,将图片宽度设置为最大高度,此时需要等比例减小宽度*/ } else if (oldwi <= max_wi && oldhe > max_he) { new_he = max_he; new_wi = new Float(new_he * rate).intValue(); }// System.err.println("原宽度:" + oldwi + "原高度:" + oldhe + "_" + rate); /*开始改变大小*/ ImageObserver ser = null; BufferedImage bf = new BufferedImage(new_wi, new_he, BufferedImage.TYPE_INT_RGB); bf.getGraphics().drawImage(bufImg, 0, 0, new_wi, new_he, null);// System.err.println("新宽度:" + bf.getWidth() + "-" + "新高度:" + bf.getHeight()); ByteArrayOutputStream out = new ByteArrayOutputStream(); //转换编码格式JPEG ImageIO.write(bf, "jpeg", out); byte[] re = out.toByteArray(); //logger.info("【图片剪切】| 图片原大小={}kb | 压缩后大小={}kb", (data.length / 1024), (re.length / 1024)); return re; }
使用
controller
@RequestMapping(value = "/getImage", method = RequestMethod.POST) @ResponseBody public JsonData getidcart(@RequestParam(value = "front", required = false) MultipartFile front) throws Exception { byte[] IdCartFront; /** * 图片字节 * 判断压缩 >300kb就压缩到300kb以下 300000k=300kb 设置宽高px--->转小kb */ if (front.getSize() > SIZE_DEFUALT) { IdCartFront = ImageUtils.imageSet(front.getBytes()); } else { IdCartFront = front.getBytes(); }
页面
js
/** 获取照片 */function getImg(e, eId, next) { var imgFile = e.target.files[0]; var newImgFile = window.webkitURL.createObjectURL(imgFile); document.getElementById("" + eId + "").style.backgroundImage = "url(" + newImgFile + ")"; if (next == 1) { front = imgFile; } else if (next == 2) { back = imgFile; } else if (next == 3) { face = imgFile; }}//ajax:************************//将file文件转为formdata,Ajax传到后台 formData = new FormData(); formData.append('front', front); url: url, type: 'POST', cache: false, data: formData, processData: false, contentType: false,
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年03月30日 17时54分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
七 socket编程
2021-05-07
Vue实现选项卡功能
2021-05-07
清除默认样式
2021-05-07
数据结构——链表
2021-05-07
[数据结构与算法]链表逆置与遍历
2021-05-07
CommonJs
2021-05-07
ICMP网际控制报文协议
2021-05-07
[编程题]Course List for Student (25)
2021-05-07
【Python】面向对象,封装
2021-05-07
接口又是个啥?
2021-05-07
5.11 TEST1
2021-05-07
uni-app请求头中携带token
2021-05-07
常用的 Git 命令和小技巧(1)
2021-05-07
vue中接收后台的图片验证码并显示
2021-05-07
springboot入门(1)---整合MyBatis
2021-05-07
Vue入门学习笔记(1)
2021-05-07
ECharts——双向柱状图
2021-05-07
Vue——引进bootstrap
2021-05-07
Vue——引进ivew
2021-05-07