Java實(shí)現(xiàn)壓縮圖片大小
本文實(shí)例為大家分享了Java實(shí)現(xiàn)壓縮圖片大小的具體代碼,供大家參考,具體內(nèi)容如下
使用場(chǎng)景:
1.當(dāng)使用圖片上傳功能時(shí),上傳圖片太大,造成對(duì)服務(wù)器資源過(guò)多的占用
2.客戶端上傳圖片尺寸大小不一,前端需要展示給用戶固定尺寸時(shí),可通過(guò)java進(jìn)行對(duì)上傳圖片統(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")); ? ? ? ? ? ? //原始圖片的長(zhǎng)度和寬度 ? ? ? ? ? ? int height = templateImage.getHeight(); ? ? ? ? ? ? int width = templateImage.getWidth(); ? ? ? ? ? ? //通過(guò)比例壓縮 ? ? ? ? ? ? float scale = 0.5f; ? ? ? ? ? ? //通過(guò)固定長(zhǎng)度壓縮 ? ? ? ? ? ? /*int doWithHeight = 100; ? ? ? ? ? ? int dowithWidth = 300;*/ ? ? ? ? ? ? //壓縮之后的長(zhǎng)度和寬度 ? ? ? ? ? ? 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(); ? ? ? ? } ? ? } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle + Mybatis實(shí)現(xiàn)批量插入、更新和刪除示例代碼
利用MyBatis動(dòng)態(tài)SQL的特性,我們可以做一些批量的操作,下面這篇文章主要給大家介紹了關(guān)于Oracle + Mybatis實(shí)現(xiàn)批量插入、更新和刪除的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2018-01-01教新手使用java如何對(duì)一個(gè)大的文本文件內(nèi)容進(jìn)行去重
用HashSet對(duì)內(nèi)容去重這個(gè)過(guò)程jvm會(huì)內(nèi)存溢出,只能首先將這個(gè)大文件中的內(nèi)容讀取出來(lái),對(duì)每行String的hashCode取模取正整數(shù),可用取模結(jié)果作為文件名,將相同模數(shù)的行寫(xiě)入同一個(gè)文件,再單獨(dú)對(duì)每個(gè)小文件進(jìn)行去重,最后再合并2021-06-06SpringBoot項(xiàng)目配置數(shù)據(jù)庫(kù)密碼加密相關(guān)代碼
這篇文章主要介紹了SpringBoot項(xiàng)目配置數(shù)據(jù)庫(kù)密碼加密的相關(guān)資料,本文介紹了在Springboot項(xiàng)目中配置數(shù)據(jù)庫(kù)連接時(shí)存在的安全問(wèn)題,即用戶名和密碼以明文形式存儲(chǔ),容易泄露,提出了一種簡(jiǎn)單的加密方案,需要的朋友可以參考下2024-11-11一篇文章帶你學(xué)會(huì)Spring?MVC表單標(biāo)簽
Spring MVC表單標(biāo)簽是網(wǎng)頁(yè)的可配置和可重復(fù)使用的構(gòu)建塊,下面這篇文章主要給大家介紹了如何通過(guò)一篇文章學(xué)會(huì)Spring?MVC表單標(biāo)簽的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03dubbo整合springboot新手入門(mén)教程詳解
這篇文章主要介紹了dubbo整合springboot新手入門(mén)詳解,當(dāng)一臺(tái)計(jì)算機(jī)的程序需要調(diào)用另一臺(tái)計(jì)算機(jī)代碼的時(shí)候,就涉及遠(yuǎn)程調(diào)用。此時(shí)dubbo就粉末登場(chǎng)了,需要的朋友可以參考下2019-07-07SpringBoot整合JWT實(shí)戰(zhàn)教程
JWT(JSON?Web?Token)是一種用于身份驗(yàn)證和授權(quán)的開(kāi)放標(biāo)準(zhǔn)(RFC?7519),它使用JSON格式傳輸信息,可以在不同系統(tǒng)之間安全地傳遞數(shù)據(jù),這篇文章主要介紹了SpringBoot整合JWT實(shí)戰(zhàn)教程,需要的朋友可以參考下2023-06-06