成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

java實例解析之1M圖片壓縮優化到100kb

本篇文章給大家帶來了關于java的相關知識,主要為大家介紹了java實現1M圖片壓縮優化到100kb示例詳解,圖像壓縮是數據壓縮技術在數字圖像上的應用,有需要的朋友可以借鑒參考下,希望能夠有所幫助。

java實例解析之1M圖片壓縮優化到100kb

推薦學習:《java視頻教程》

一、圖像壓縮

圖像壓縮是數據壓縮技術在數字圖像上的應用,目的是減少圖像數據中的冗余信息,從而用更加高效的格式存儲和傳輸數據。

圖像壓縮可以是有損數據壓縮,也可以是無損數據壓縮。

java實例解析之1M圖片壓縮優化到100kb

java實例解析之1M圖片壓縮優化到100kb

怎么樣?

是不是感覺圖像壓縮技術沒有想象中那么簡單了?

二、Java數字圖像處理

作為這次“20 多萬外包項目”的“主力開發人員”,我這里就給大家介紹下 Java 數字圖像處理技術吧,一開始我就是用它來處理圖片的。

數字圖像處理(Digital Image Processing)是通過計算機對圖像進行去除噪聲、增強、復原、分割、提取特征等處理的方法和技術。

java實例解析之1M圖片壓縮優化到100kb

輸入的是圖像信號,然后經過 DIP 進行有效的算法處理后,輸出為數字信號。

為了壓縮圖像,我們需要讀取圖像并將其轉換成 BufferedImage 對象,BufferedImage 是 Image 類的一個子類,描述了一個具有可訪問的圖像數據緩沖區,由 ColorModel 和 Raster 的圖像數據組成。

java實例解析之1M圖片壓縮優化到100kb

廢話我就不多說了,直接進入實戰吧!

三、圖像壓縮實戰

剛好我本地有一張之前用過的封面圖,離 1M 只差 236 KB,可以拿來作為測試用。

java實例解析之1M圖片壓縮優化到100kb

這其中要用到 ImageIO 類,這是一個靜態類,提供了一系列方法用來讀和寫圖像,同時還可以對圖像進行簡單的編碼和解碼。

比如說通過 ImageIO.read() 可以將圖像讀取到 BufferedImage 對象:

File input = new File("ceshi.jpg"); BufferedImage image = ImageIO.read(input);

比如說通過 ImageIO.getImageWritersByFormatName() 可以返回一個Iterator,其中包含了通過命名格式對圖像進行編碼的 ImageWriter。

Iterator<ImageWriter> writers =  ImageIO.getImageWritersByFormatName("jpg"); ImageWriter writer = (ImageWriter) writers.next();

比如說通過 ImageIO.createImageOutputStream() 可以創建一個圖像的輸出流對象,有了該對象后就可以通過 ImageWriter.setOutput() 將其設置為輸出流。

File compressedImageFile = new File("bbcompress.jpg"); OutputStream os =new FileOutputStream(compressedImageFile); ImageOutputStream ios = ImageIO.createImageOutputStream(os); writer.setOutput(ios);

緊接著,可以對 ImageWriter 進行一些參數配置,比如說壓縮模式,壓縮質量等等。

ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(0.01f);

壓縮模式一共有四種,MODE_EXPLICIT 是其中一種,表示 ImageWriter 可以根據后續的 set 的附加信息進行平鋪和壓縮,比如說接下來的 setCompressionQuality() 方法。

setCompressionQuality() 方法的參數是一個 0-1 之間的數,0.0 表示盡最大程度壓縮,1.0 表示保證圖像質量很重要。對于有損壓縮方案,壓縮質量應該控制文件大小和圖像質量之間的權衡(例如,通過在寫入 JPEG 圖像時選擇量化表)。 對于無損方案,壓縮質量可用于控制文件大小和執行壓縮所需的時間之間的權衡(例如,通過優化行過濾器并在寫入 PNG 圖像時設置 ZLIB 壓縮級別)。

整體代碼如下所示:

public class Demo {     public static void main(String[] args) {         try {             File input = new File("ceshi.jpg");             BufferedImage image = ImageIO.read(input);             Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");             ImageWriter writer = (ImageWriter) writers.next();             File compressedImageFile = new File("bbcompress.jpg");             OutputStream os = new FileOutputStream(compressedImageFile);             ImageOutputStream ios = ImageIO.createImageOutputStream(os);             writer.setOutput(ios);             ImageWriteParam param = writer.getDefaultWriteParam();             param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);             param.setCompressionQuality(0.01f);             writer.write(null, new IIOImage(image, null, null), param);             os.close();             ios.close();             writer.dispose();         } catch (IOException e) {             e.printStackTrace();         }     } }

執行壓縮后,可以看到圖片的大小壓縮到了 19 KB:

java實例解析之1M圖片壓縮優化到100kb

可以看得出,質量因子為 0.01f 的時候圖片已經有些失真了,可以適當提高質量因子比如說 0.5f,再來看一下。

java實例解析之1M圖片壓縮優化到100kb

圖片質量明顯提高了,但大小依然只有 64 KB,壓縮效果還是值得信賴的。

四、其他開源庫

接下來,推薦一些可以輕松集成到項目中的圖像處理庫吧,它們全都是免費的。

1)ImageJ,用 Java 編寫的,可以編輯、分析、處理、保存和打印圖像。

java實例解析之1M圖片壓縮優化到100kb

2)Apache Commons Imaging,一個讀取和寫入各種圖像格式的庫,包括快速解析圖像信息(如大小,顏色,空間,ICC配置文件等)和元數據。

java實例解析之1M圖片壓縮優化到100kb

3)ImageMagick,可以讀取和寫入超過100種格式的圖像,包括DPX、EXR、GIF、JPEG、JPEG-2000、PDF、PNG、Postscript、SVG和TIFF。還可以調整大小、翻轉、鏡像、旋轉、扭曲、剪切和變換圖像,調整圖像顏色,應用各種特殊效果,包括繪制文本、線條、多邊形、橢圓和貝塞爾曲線。

java實例解析之1M圖片壓縮優化到100kb

4)OpenCV,由BSD許可證發布,可以免費學習和商業使用,提供了包括 C/C++、Python 和 Java 等主流編程語言在內的接口。OpenCV 專為計算效率而設計,強調實時應用,可以充分發揮多核處理器的優勢。

java實例解析之1M圖片壓縮優化到100kb

這里就以 OpenCV 為例,來演示一下圖像壓縮。當然了,OpenCV 用來壓縮圖像屬于典型的大材小用。

第一步,添加 OpenCV 依賴到我們的項目當中,以 Maven 為例。

<dependency> 	<groupId>org.openpnp</groupId> 	<artifactId>opencv</artifactId> 	<version>4.5.1-2</version> </dependency>

第二步,要想使用 OpenCV,需要先初始化。

OpenCV.loadShared();

第三步,使用 OpenCV 讀取圖片。

Mat src = Imgcodecs.imread(imagePath);

第四步,使用 OpenCV 壓縮圖片。

MatOfInt dstImage = new MatOfInt(Imgcodecs.IMWRITE_JPEG_QUALITY, 1); Imgcodecs.imwrite("resized_image.jpg", sourceImage, dstImage);

MatOfInt 的構造參數是一個可變參數,第一個參數 IMWRITE_JPEG_QUALITY 表示對圖片的質量進行改變,第二個是質量因子,1-100,值越大表示質量越高。

執行代碼后得到的圖片如下所示:

java實例解析之1M圖片壓縮優化到100kb

借這個機會,來對比下 OpenCV 和 JDK 原生 API 在壓縮圖像時所使用的時間。

這是我本機的配置情況,早年買的頂配 iMac,也是我的主力機。一開始只有 16 G 內存,后來加了一個 16 G 內存條,不過最近半年電腦突然死機重啟的頻率明顯提高了,不知道是不是 Big Sur 這個操作系統的問題還是電腦硬件老了。

java實例解析之1M圖片壓縮優化到100kb

結果如下所示:

opencvCompress壓縮完成,所花時間:1070
jdkCompress壓縮完成,所花時間:322

壓縮后的圖片大小差不多,都是 19 KB,并且質量因子都是最低值。

java實例解析之1M圖片壓縮優化到100kb

推薦學習:《java視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
精品人妻视频一区二区三区| 久久99精品久久久久久不卡| 国色天香在线视频免费观看| 娇妻当着我的面被4P| 久久国产精品无码网站| 快拨出去我是你老师啊作文| 欧美激情一区二区三区在线| 人妻丰满熟妇AV无码片| 四虎成人精品国产永久免费无码| 香港三日本三级少妇三级视频 | 国产AV国片精品一区二区| 国产裸体歌舞一区二区| 精品色欲少妇一区二区三区| 免费国产无人区码卡二卡3卡| 全球AV集中精品导航福利| 挺进绝色老师的紧窄小肉六视频| 亚洲第一AV网站| 中国少妇内射XXXHD| 成A人片亚洲日本久久| 国产精品无码午夜福利| 久久精品99无色码中文字幕| 奶头被客人玩的又红又肿| 色妞精品AV一区二区三区| 亚洲AV美国AV产亚洲AV图片| 玉蒲团Ⅲ艳乳叶媚子| 成年女人毛片免费视频喷潮| 国产性大战XXXXX久久久| 久久婷婷六月综合色液啪| 人人妻人人澡人人爽人人DVD| 无码中文精品视视在线观看| 亚洲一区AV无码少妇电影| 啊灬啊灬啊灬快灬少妇软件| 国产午夜亚洲精品午夜鲁丝片| 老公和小三在车上做我想卖了车| 日本中文字幕一区二区高清在线| 亚洲AV成人综合网伊人| 50岁老熟人乱一区二区三区| 国产成人精品综合久久久久| 久久久久久久久久久综合日本| 人妻天天爽夜夜爽精品视频| 亚洲AV无码成人精品区日韩| 69日本人XXXX16-18| 国产精品99久久99久久久| 久久天天躁狠狠躁夜夜AV浪潮 | 成人无码黄动漫在线播放| 精东传媒VS天美传媒在线| 欧美性狂猛BBBBBBXXXX| 亚洲AV日韩AV无码AV一区二| 99热成人精品热久久6| 国产亚洲精品精华液好用吗| 欧美黑人巨大VIDEOS极品 | 日韩A无V码在线播放| 亚洲欧洲无码一区二区三区| 成人A片产无码免费视频在线观看| 皇上骑带木棒的早朝| 人人妻人人澡人人爽超污| 亚洲精品四区麻豆文化传媒| 超碰CAOPORON入口| 久久久久精品无码AV| 天美传媒自制剧免费观看| 中文字幕在线不卡精品视频99| 国产精品私密保养| 欧美老熟妇欲乱高清视频| 亚洲成AV人片在线观看| 成人爽A毛片在线视频淮北| 久久久久久精品免费免费SSS| 首页 综合国产 亚洲 丝袜日本| 瑜伽裤国产一区二区三区| 国产美女精品自在线拍免费| 欧洲无人区天空码头IV在哪一本| 亚洲精品NV久久久久久久久久| 大帝AV在线一区二区三区| 美女扒开奶罩露出奶头视频网站| 香蕉尹人综合在线观看| 八旬老太太BGMBGMBGM性| 久久天天躁狠狠躁夜夜AV浪潮| 无人高清视频完整版在线观看| WWW.射射爽射射爽射射爽| 久久天天躁狠狠躁夜夜躁2014| 无码乱人伦一区二区亚洲一| ZOMBIE视频SUPREME| 久久久久久一区国产精品| 午夜亚洲国产理论片中文飘花| YSL水蜜桃86| 老师你乖乖的可以让你少吃点苦头 | 日韩一区二区三区AV| 最新69国产成人精品视频免费| 国产亚洲欧美精品一区| 少妇一级无码精品| ZPS无套内射视频免费播放| 老公朋友东西好大| 亚洲另类无码专区首页| 国产精品无码MV在线观看| 日韩精品久久久久久免费| 97久久国产亚洲精品超碰热| 久久精品香蕉绿巨人登场| 亚洲GV永久无码天堂网| 国产激情久久久久久熟女老人| 强开小娟嫩苞又嫩又紧| 最新无码国产在线视频9299| 久久久精品中文字幕麻豆发布| 亚洲AV元码天堂一区二区三区| 国产成人片无码视频在线观看 | 成人无码小视频在线观看| 欧美日韩精品人妻一区二区三区| 一二三四免费观看在线影视大全 | 亚洲国产激情一区二区三区| 国产乱人伦偷精品视频不卡| 天堂国品一二三产品区别大吗 | 精品熟人妻一区二区三区四区不卡 | 欧洲美熟女乱又伦AV| 18禁H免费动漫无码网站| 久久久久亚洲AV无码网站| 亚洲欧美另类在线| 精品久久久无码中文字幕一丶| 亚洲AV无码乱码在线观看| 国产美女高潮视频| 西方44大但人文艺术是什么东西| 国产超碰人人爽人人做| 少妇人妻偷人精品无码视频新浪 | 天天爽夜夜爽人人爽一区二区| 粉嫩av一区二区夜夜嗨| 色欲aⅴ精品一区二区三区浪潮 | 18禁美女裸体无遮挡免费观看国| 廖承宇做受被C22分钟视频| 伊人久久大香线蕉AV综合| 老师黑色双开真丝旗袍恩施MBA| 一本久久综合亚洲鲁鲁五月天| 久久精品人妻少妇一区二区| 亚洲欧美中文日韩在线V日本| 久久97人人超人人超碰超国产| 亚洲精品性爱av| 久久精品亚洲日本波多野结衣 | 香蕉直播永久免费版APP| 国产三级农村妇女在线| 亚洲AV日韩AV高潮喷潮无码天| 和岳每晚弄的高潮嗷嗷叫| 亚洲精品成AV人片天堂无码| 九九99久久精品国产| 一区二区三区国产精华护肤品| 麻豆一区二区在我观看| 7777色情XXXX欧美| 人妻内射一区二区在线视频| 成人乱子视频在线播放| 天堂资源中文WWW| 国产在线不卡人成视频| 亚洲乱人伦中文字幕无码| 久久这里精品国产99丫E6| 91人妻人人澡人人爽| 日本19禁啪啪吃奶大尺度| 国产成人精品无码免费看| 性欧美XXXX乳| 精品无码久久久久久久久| 在小巷里被强高HNP| 欧美性狂猛XXXXX深喉| 粉嫩av.一区二区三区免费| 无码夜色一区二区三区| 精品国产亚洲AV麻豆| 在线视频精品中文无码| 欧洲精品VA无码一区二区三区| 东北老女人高潮大叫对白| 香港经典A毛片免费观看变态| 精品人体无码一区二区三区| 中文激情在线一区二区| 日本乱码卡一卡新区入口| 国产乱妇乱子在线视频| 亚洲一区二区三区无码影院| 欧美VPSWINDOWS性另类| 国产98涩在线 | 欧洲| 亚洲成人AV在线| 男人吃奶摸下挵进去好爽| 多毛BGMBGMBGM胖在| 亚洲AV无码国产永久播放蜜芽 | ⅩXXX张柏芝XXXX| 天堂√中文最新版在线| 精品熟女少妇AⅤ免费久久| 99热成人精品热久久6网站| 天天狠天天透天干天天怕| 精品一卡2卡3卡4卡新区在线| 97夜夜澡人人爽人人| 未成18不能看的视频| 久久精品九九热无码免贵| А√天堂中文在线| 亚洲AⅤ中文无码字幕色 | 无码成人AAAAA毛片| 久久久久夜色精品国产明星| 波多野结衣AV影音先锋| 亚洲AV无码不卡| 免费人妻AⅤ无码专区久久综合| 高潮久久久久久久久不卡| 亚洲人亚洲精品成人网站| 人妻无码一区二区三区AV| 含着她的花蒂啃咬高潮| AV国内精品久久久久影院| 小说 亚洲 无码 精品| 男男AV纯肉无码免费播放无码 | 小妖精好爽H快穿共妻| 免费污站18禁的刺激| 国产精品爽爽VA在线观看| 最新无码国产在线视频9299|