springboot實(shí)現(xiàn)圖片大小壓縮功能
本文實(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)文章
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-12Java實(shí)戰(zhàn)之實(shí)現(xiàn)OA辦公管理系統(tǒng)
這篇文章主要介紹了如何通過(guò)Java實(shí)現(xiàn)OA辦公管理系統(tǒng),文章采用到了JSP、JQuery、Ajax等技術(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-02-02Spring Boot 集成Shiro的多realm實(shí)現(xiàn)以及shiro基本入門教程
這篇文章主要介紹了Spring Boot 集成Shiro的多realm實(shí)現(xiàn)以及shiro基本入門,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10