欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot實(shí)現(xiàn)圖片大小壓縮功能

 更新時(shí)間:2022年04月22日 15:00:26   作者:友發(fā)小猿  
這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)圖片大小壓縮功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了springboot實(shí)現(xiàn)圖片大小壓縮的具體代碼,供大家參考,具體內(nèi)容如下

application.properties配置文件

#后端接收?qǐng)D片大小
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;
/
/**
? ? ?* 請(qǐng)求調(diào)用方法
? ? ?* 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 更改圖片內(nèi)容的大小 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;
? ? ? ? /*如果圖片的原寬大于最大寬度,并且原高小于等于最大高度。則證明圖片過(guò)寬了,將圖片寬度設(shè)置為最大寬度,此時(shí)需要等比例減小高度*/
? ? ? ? if (oldwi > max_wi && oldhe <= max_he) {
? ? ? ? ? ? new_wi = max_wi;
? ? ? ? ? ? new_he = new Float((float) new_wi / rate).intValue();
? ? ? ? ? ? /*如果圖片的原寬和原高都大于或者都小于其所對(duì)應(yīng)的最大值,則以任意一方為主(此處以最大高度為主)*/
? ? ? ? } 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();
? ? ? ? ? ? /*如果圖片的原寬小于于最大寬度,并且原高大于等于最大高度。則證明圖片過(guò)高了,將圖片寬度設(shè)置為最大高度,此時(shí)需要等比例減小寬度*/
? ? ? ? } 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();
? ? ? ? //轉(zhuǎn)換編碼格式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;
? ? ? ? /**
? ? ? ? ?* ?圖片字節(jié)
? ? ? ? ?* ?判斷壓縮 >300kb就壓縮到300kb以下 300000k=300kb 設(shè)置寬高px--->轉(zhuǎn)小kb
? ? ? ? ?*/
? ? ? ? if (front.getSize() > SIZE_DEFUALT) {
? ? ? ? ? ? IdCartFront = ImageUtils.imageSet(front.getBytes());
? ? ? ? } else {
? ? ? ? ? ? IdCartFront = front.getBytes();
? ? ? ? }

頁(yè)面

<!--身份證正面-->
<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文件轉(zhuǎn)為formdata,Ajax傳到后臺(tái)
? ? formData = new FormData();
? ? formData.append('front', front);
??
? ??? ??? ??? ?url: url,
? ? ? ? ? ? type: 'POST',
? ? ? ? ? ? cache: false,
? ? ? ? ? ? data: formData,
? ? ? ? ? ? processData: false,
? ? ? ? ? ? contentType: false,

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring中的@Async原理分析

    Spring中的@Async原理分析

    這篇文章主要介紹了Spring中的@Async原理分析,自定義new ThreadPoolExecutor并調(diào)用invokeAll等進(jìn)行并發(fā)編程,后面發(fā)現(xiàn)只要在方法上添加@Async注解,并使用@EnableAsync進(jìn)行開啟默認(rèn)會(huì)使用SimpleAsyncTaskExecutor類型,需要的朋友可以參考下
    2024-01-01
  • IDEA 自動(dòng)跳出括號(hào)的快捷鍵分享

    IDEA 自動(dòng)跳出括號(hào)的快捷鍵分享

    這篇文章主要介紹了IDEA 自動(dòng)跳出括號(hào)的快捷鍵分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java中占位符的超全使用方法分享

    Java中占位符的超全使用方法分享

    這篇文章主要為大家詳細(xì)介紹了Java中常見的一些占位符的使用方法,例如%d,%s等,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)
    2023-05-05
  • java單例模式實(shí)現(xiàn)的方法

    java單例模式實(shí)現(xiàn)的方法

    這篇文章主要介紹了如何在JAVA中實(shí)現(xiàn)單例模式,文中代碼簡(jiǎn)單易懂,供大家參考學(xué)習(xí),感興趣的小伙伴可以了解下
    2020-06-06
  • Redis集群與SSM整合使用方法

    Redis集群與SSM整合使用方法

    這篇文章主要介紹了Redis集群與SSM整合使用方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • SpringBoot設(shè)置默認(rèn)主頁(yè)的方法步驟

    SpringBoot設(shè)置默認(rèn)主頁(yè)的方法步驟

    這篇文章主要介紹了SpringBoot設(shè)置默認(rèn)主頁(yè)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java實(shí)戰(zhàn)之實(shí)現(xiàn)OA辦公管理系統(tǒng)

    Java實(shí)戰(zhàn)之實(shí)現(xiàn)OA辦公管理系統(tǒng)

    這篇文章主要介紹了如何通過(guò)Java實(shí)現(xiàn)OA辦公管理系統(tǒng),文章采用到了JSP、JQuery、Ajax等技術(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • java基礎(chǔ)入門之IO流

    java基礎(chǔ)入門之IO流

    流是一種抽象概念,它代表了數(shù)據(jù)的無(wú)結(jié)構(gòu)化傳遞。。用來(lái)進(jìn)行輸入輸出操作的流就稱為IO流。換句話說(shuō),IO流就是以流的方式進(jìn)行輸入輸出
    2021-06-06
  • Java synchronized與CAS使用方式詳解

    Java synchronized與CAS使用方式詳解

    提到Java的知識(shí)點(diǎn)一定會(huì)有多線程,JDK版本不斷的更迭很多新的概念和方法也都響應(yīng)提出,但是多線程和線程安全一直是一個(gè)重要的關(guān)注點(diǎn)。比如說(shuō)我們一入門就學(xué)習(xí)的synchronized怎么個(gè)實(shí)現(xiàn)和原理,還有總是被提到的CAS是啥,他和synchronized關(guān)系是啥?請(qǐng)往下看
    2023-01-01
  • Spring Boot 集成Shiro的多realm實(shí)現(xiàn)以及shiro基本入門教程

    Spring Boot 集成Shiro的多realm實(shí)現(xiàn)以及shiro基本入門教程

    這篇文章主要介紹了Spring Boot 集成Shiro的多realm實(shí)現(xiàn)以及shiro基本入門,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論