springboot实现图片大小压缩功能

 更新时间:2022年04月22日 15:00:26   作者:友发小猿  
这篇文章主要为大家详细介绍了springboot实现图片大小压缩功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了springboot实现图片大小压缩的具体代码,供大家参考,具体内容如下

application.properties配置文件

#后端接收图片大小
spring.servlet.multipart.max-file-size=50MB
spring.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();
        }

页面

<!--身份证正面-->
<div class="photo" id="photo" enctype="multipart/form-data">
         <input type="file" multiple="multiple" accept="image/*"
            onchange="getImg(event,'photo',1)" enctype="multipart/form-data" id="face" required/>
</div>

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,

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring boot整合连接池实现过程图解

    Spring boot整合连接池实现过程图解

    这篇文章主要介绍了Spring boot整合连接池实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • java调用远程服务器的shell脚本以及停止的方法实现

    java调用远程服务器的shell脚本以及停止的方法实现

    这篇文章主要介绍了java调远程服务器的shell脚本以及停止的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java实现冒泡排序

    Java实现冒泡排序

    这篇文章主要为大家详细介绍了Java实现冒泡排序,把一列数组按从小到大或从大到小排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Spring Boot利用JSR303实现参数验证的方法实例

    Spring Boot利用JSR303实现参数验证的方法实例

    这篇文章主要给大家介绍了关于Spring Boot利用JSR303实现参数验证的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • Spring创建bean实例的几种方式分享

    Spring创建bean实例的几种方式分享

    这篇文章主要介绍了Spring创建bean实例的几种方式分享,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Java引用传递实现方式以及与值传递的区别

    Java引用传递实现方式以及与值传递的区别

    这篇文章主要给大家介绍了关于Java引用传递实现方式以及与值传递的区别的相关资料,引用传递指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数,需要的朋友可以参考下
    2023-09-09
  • java实现桌球游戏

    java实现桌球游戏

    这篇文章主要为大家详细介绍了java实现桌球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • SpringBoot整合Swagger教程详解

    SpringBoot整合Swagger教程详解

    SpringBoot是一个基于Spring框架的轻量级开源框架,它的出现极大地简化了Spring应用的搭建和开发,本文将介绍如何在SpringBoot中使用Swagger来实现接口文档的自动生成,感兴趣的同学可以参考一下
    2023-04-04
  • jetty运行时无法保存文件的解决方法

    jetty运行时无法保存文件的解决方法

    这篇文章主要为大家详细介绍了jetty运行时无法保存文件的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 深入了解Java线程池的原理使用及性能优化

    深入了解Java线程池的原理使用及性能优化

    JAVA线程池是一种管理和复用线程资源的机制,可以提高程序的效率和响应速度。本文将介绍线程池的原理、使用方法和性能优化技巧,帮助读者深入了解和应用JAVA线程池
    2023-04-04

最新评论