Java實(shí)現(xiàn)壓縮圖片大小
本文實(shí)例為大家分享了Java實(shí)現(xiàn)壓縮圖片大小的具體代碼,供大家參考,具體內(nèi)容如下
使用場景:
1.當(dāng)使用圖片上傳功能時(shí),上傳圖片太大,造成對服務(wù)器資源過多的占用
2.客戶端上傳圖片尺寸大小不一,前端需要展示給用戶固定尺寸時(shí),可通過java進(jìn)行對上傳圖片統(tǒng)一進(jìn)行處理
功能預(yù)覽
1.壓縮前
2.壓縮后
代碼實(shí)現(xiàn):
package com.linghu.test; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; /* ?* @author 在下令狐 ?* @describe ?壓縮圖片大小 ?* @date 2020/6/12 ?*/ public class TestCompressImage { ? ? public static void main(String[] args) { ? ? ? ? try { ? ? ? ? ? ? //圖片所在路徑 ? ? ? ? ? ? BufferedImage templateImage = ImageIO.read(new File("f:/temp/linghu.jpg")); ? ? ? ? ? ? //原始圖片的長度和寬度 ? ? ? ? ? ? int height = templateImage.getHeight(); ? ? ? ? ? ? int width = templateImage.getWidth(); ? ? ? ? ? ? //通過比例壓縮 ? ? ? ? ? ? float scale = 0.5f; ? ? ? ? ? ? //通過固定長度壓縮 ? ? ? ? ? ? /*int doWithHeight = 100; ? ? ? ? ? ? int dowithWidth = 300;*/ ? ? ? ? ? ? //壓縮之后的長度和寬度 ? ? ? ? ? ? int doWithHeight = (int) (scale * height); ? ? ? ? ? ? int dowithWidth = (int) (scale * width); ? ? ? ? ? ? BufferedImage finalImage = new BufferedImage(dowithWidth, doWithHeight, BufferedImage.TYPE_INT_RGB); ? ? ? ? ? ? finalImage.getGraphics().drawImage(templateImage.getScaledInstance(dowithWidth, doWithHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null); ? ? ? ? ? ? //圖片輸出路徑,以及圖片名 ? ? ? ? ? ? FileOutputStream ?fileOutputStream = new FileOutputStream("f:/temp/linghuAfterDoWith.jpg"); ? ? ? ? ? ? JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream); ? ? ? ? ? ? encoder.encode(finalImage); ? ? ? ? ? ? fileOutputStream.close(); ? ? ? ? } catch (IOException e) { ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? } ? ? } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle + Mybatis實(shí)現(xiàn)批量插入、更新和刪除示例代碼
利用MyBatis動態(tài)SQL的特性,我們可以做一些批量的操作,下面這篇文章主要給大家介紹了關(guān)于Oracle + Mybatis實(shí)現(xiàn)批量插入、更新和刪除的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2018-01-01教新手使用java如何對一個(gè)大的文本文件內(nèi)容進(jìn)行去重
用HashSet對內(nèi)容去重這個(gè)過程jvm會內(nèi)存溢出,只能首先將這個(gè)大文件中的內(nèi)容讀取出來,對每行String的hashCode取模取正整數(shù),可用取模結(jié)果作為文件名,將相同模數(shù)的行寫入同一個(gè)文件,再單獨(dú)對每個(gè)小文件進(jìn)行去重,最后再合并2021-06-06SpringBoot項(xiàng)目配置數(shù)據(jù)庫密碼加密相關(guān)代碼
這篇文章主要介紹了SpringBoot項(xiàng)目配置數(shù)據(jù)庫密碼加密的相關(guān)資料,本文介紹了在Springboot項(xiàng)目中配置數(shù)據(jù)庫連接時(shí)存在的安全問題,即用戶名和密碼以明文形式存儲,容易泄露,提出了一種簡單的加密方案,需要的朋友可以參考下2024-11-11一篇文章帶你學(xué)會Spring?MVC表單標(biāo)簽
Spring MVC表單標(biāo)簽是網(wǎng)頁的可配置和可重復(fù)使用的構(gòu)建塊,下面這篇文章主要給大家介紹了如何通過一篇文章學(xué)會Spring?MVC表單標(biāo)簽的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03SpringBoot整合JWT實(shí)戰(zhàn)教程
JWT(JSON?Web?Token)是一種用于身份驗(yàn)證和授權(quán)的開放標(biāo)準(zhǔn)(RFC?7519),它使用JSON格式傳輸信息,可以在不同系統(tǒng)之間安全地傳遞數(shù)據(jù),這篇文章主要介紹了SpringBoot整合JWT實(shí)戰(zhàn)教程,需要的朋友可以參考下2023-06-06