java 壓縮圖片(只縮小體積,不更改圖片尺寸)的示例
1.情景展示
在調用騰訊身份證OCR接口的時候,由于要求圖片大小只能限制在1MB以內(nèi),這樣,就必須使用到圖片壓縮技術
2.代碼展示
/** * 圖片處理工具類 * @explain * @author Marydon * @creationTime 2019年9月3日上午10:14:17 * @version 1.0 * @since * @email marydon20170307@163.com */ public class ImgUtils { /** * 壓縮圖片(通過降低圖片質量) * @explain 壓縮圖片,通過壓縮圖片質量,保持原圖大小 * @param quality * 圖片質量(0-1) * @return byte[] * 壓縮后的圖片(jpg) * @throws */ public static byte[] compressPicByQuality(byte[] imgByte, float quality) { byte[] imgBytes = null; try { ByteArrayInputStream byteInput = new ByteArrayInputStream(imgByte); BufferedImage image = ImageIO.read(byteInput); // 如果圖片空,返回空 if (image == null) { return null; } // 得到指定Format圖片的writer(迭代器) Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpeg"); // 得到writer ImageWriter writer = (ImageWriter) iter.next(); // 得到指定writer的輸出參數(shù)設置(ImageWriteParam ) ImageWriteParam iwp = writer.getDefaultWriteParam(); // 設置可否壓縮 iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // 設置壓縮質量參數(shù) iwp.setCompressionQuality(quality); iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED); ColorModel colorModel = ColorModel.getRGBdefault(); // 指定壓縮時使用的色彩模式 iwp.setDestinationType( new javax.imageio.ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(16, 16))); // 開始打包圖片,寫入byte[] // 取得內(nèi)存輸出流 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); IIOImage iIamge = new IIOImage(image, null, null); // 此處因為ImageWriter中用來接收write信息的output要求必須是ImageOutput // 通過ImageIo中的靜態(tài)方法,得到byteArrayOutputStream的ImageOutput writer.setOutput(ImageIO.createImageOutputStream(byteArrayOutputStream)); writer.write(null, iIamge, iwp); imgBytes = byteArrayOutputStream.toByteArray(); } catch (IOException e) { System.out.println("write errro"); e.printStackTrace(); } return imgBytes; } }
3.其它代碼
import org.apache.commons.codec.binary.Base64;
String imgBase64 = ""; try { // 圖片大小超過1MB if (file.getSize()/1024 > 1024) { byte[] imgBytes = ImgUtils.compressPicByQuality(file.getBytes(),0.1F); imgBase64 = Base64.encodeBase64String(imgBytes); } else { imgBase64 = Base64.encodeBase64String(file.getBytes()); } } catch (IOException e1) { e1.printStackTrace(); }
說明:
生成的base64圖片沒有圖片格式頭,即:data:image/jpeg;base64,
4.增加前端代碼
/** * 拍照或選擇圖片 */ this.uploadPicture = function () { // js 獲取文件對象 var fileObj = document.getElementById("file").files[0]; if (null == fileObj) { alert("圖像上傳失敗,請重試!"); } // TODO 顯示遮罩 // 創(chuàng)建form表單 var formFile = new FormData(); //加入文件對象 formFile.append("file", fileObj); // 創(chuàng)建XMLHttpRequest 對象 var xhr = new XMLHttpRequest(); xhr.open("post", baseUrl + "/weixin/facein/upImg3.do", true); xhr.onload = function () { var resData = JSON.parse(this.responseText) // 將返回數(shù)據(jù)轉換成JSON對象 var json = eval('(' + resData.data2 + ')'); // 身份證識別成功 if (json.ret == 0) { // TODO 將所需數(shù)據(jù)填充到頁面 } else { alert("識別失敗,請重試!" + json.msg); } document.getElementById("file").value = ""; // TODO 隱藏遮罩 }; // 調用騰訊接口 xhr.send(formFile); };
以上就是java 壓縮圖片(只縮小體積,不更改圖片尺寸)的示例的詳細內(nèi)容,更多關于java 壓縮圖片的資料請關注腳本之家其它相關文章!
相關文章
使用springmvc的controller層獲取到請求的數(shù)據(jù)方式
這篇文章主要介紹了使用springmvc的controller層獲取到請求的數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08SpringBoot Jackson日期格式化統(tǒng)一配置的實現(xiàn)
Spring項目中經(jīng)常需要配置日期時間格式格式,本文主要介紹了SpringBoot Jackson日期格式化統(tǒng)一配置的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-08-08如何使用Spring AOP的通知類型及創(chuàng)建通知
這篇文章主要給大家介紹了關于如何使用Spring AOP的通知類型及創(chuàng)建通知的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring AOP具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-12-12java中@ConfigurationProperties失效的問題解決
在Java開發(fā)中,使用@ConfigurationProperties注解讀取配置文件時,如果配置類中的屬性設置為static,將無法正確讀取配置值,本文就來介紹一下具體解決方法,感興趣的可以了解一下2024-09-09SpringBoot+Prometheus+Grafana實現(xiàn)應用監(jiān)控和報警的詳細步驟
這篇文章主要介紹了SpringBoot+Prometheus+Grafana實現(xiàn)應用監(jiān)控和報警的詳細步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02