当前位置:首页 > 开发教程 > java教程 >

springboot实现图片大小压缩功能

时间:2022-04-22 16:32 来源:未知 作者:独拥你 收藏

这篇文章主要为大家详细介绍了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,

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


java教程阅读排行

最新文章