springboot實現(xiàn)圖片大小壓縮功能
更新時間:2022年04月22日 15:00:26 作者:友發(fā)小猿
這篇文章主要為大家詳細(xì)介紹了springboot實現(xiàn)圖片大小壓縮功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了springboot實現(xiàn)圖片大小壓縮的具體代碼,供大家參考,具體內(nèi)容如下
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;
/
/**
? ? ?* 請求調(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;
? ? ? ? /*如果圖片的原寬大于最大寬度,并且原高小于等于最大高度。則證明圖片過寬了,將圖片寬度設(shè)置為最大寬度,此時需要等比例減小高度*/
? ? ? ? if (oldwi > max_wi && oldhe <= max_he) {
? ? ? ? ? ? new_wi = max_wi;
? ? ? ? ? ? new_he = new Float((float) new_wi / rate).intValue();
? ? ? ? ? ? /*如果圖片的原寬和原高都大于或者都小于其所對應(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();
? ? ? ? ? ? /*如果圖片的原寬小于于最大寬度,并且原高大于等于最大高度。則證明圖片過高了,將圖片寬度設(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();
? ? ? ? }頁面
<!--身份證正面--> <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傳到后臺
? ? formData = new FormData();
? ? formData.append('front', front);
??
? ??? ??? ??? ?url: url,
? ? ? ? ? ? type: 'POST',
? ? ? ? ? ? cache: false,
? ? ? ? ? ? data: formData,
? ? ? ? ? ? processData: false,
? ? ? ? ? ? contentType: false,以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java與JSON數(shù)據(jù)的轉(zhuǎn)換實例詳解
這篇文章主要介紹了java與JSON數(shù)據(jù)的轉(zhuǎn)換實例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
解決java-jar報錯:xxx.jar 中沒有主清單屬性的方法
在使用 java -jar xxx.jar 命令運行 Java 應(yīng)用程序時,遇到了以下錯誤:xxx.jar 中沒有主清單屬性,這個錯誤表示 JAR 文件缺少必要的啟動信息,本文將介紹該錯誤的原因以及如何通過修改 pom.xml 文件來解決,需要的朋友可以參考下2024-11-11
Java Validation Api如何實現(xiàn)自定義注解
這篇文章主要介紹了Java Validation Api如何實現(xiàn)自定義注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09
java web監(jiān)聽器統(tǒng)計在線用戶及人數(shù)
本文主要介紹了java web監(jiān)聽器統(tǒng)計在線用戶及人數(shù)的方法解析。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04
Java使用Scala實現(xiàn)尾遞歸優(yōu)化來解決爆棧問題
Scala?作為一種多范式的編程語言,結(jié)合了面向?qū)ο蠛秃瘮?shù)式編程的特性,在?Scala?中,尾遞歸?是通過編譯器優(yōu)化來防止棧溢出問題的,尾遞歸優(yōu)化是一種特殊的優(yōu)化方式,可以讓遞歸調(diào)用不使用新的棧幀,所以本文介紹了在Java項目中如何使用Scala實現(xiàn)尾遞歸優(yōu)化來解決爆棧問題2024-10-10

