gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

本篇文章給大家?guī)砹岁P(guān)于java的相關(guān)知識,主要為大家介紹了java實(shí)現(xiàn)1M圖片壓縮優(yōu)化到100kb示例詳解,圖像壓縮是數(shù)據(jù)壓縮技術(shù)在數(shù)字圖像上的應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助。

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

推薦學(xué)習(xí):《java視頻教程》

一、圖像壓縮

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

圖像壓縮可以是有損數(shù)據(jù)壓縮,也可以是無損數(shù)據(jù)壓縮。

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

怎么樣?

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

二、Java數(shù)字圖像處理

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

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

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

輸入的是圖像信號,然后經(jīng)過 DIP 進(jìn)行有效的算法處理后,輸出為數(shù)字信號。

為了壓縮圖像,我們需要讀取圖像并將其轉(zhuǎn)換成 BufferedImage 對象,BufferedImage 是 Image 類的一個(gè)子類,描述了一個(gè)具有可訪問的圖像數(shù)據(jù)緩沖區(qū),由 ColorModel 和 Raster 的圖像數(shù)據(jù)組成。

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

廢話我就不多說了,直接進(jìn)入實(shí)戰(zhàn)吧!

三、圖像壓縮實(shí)戰(zhàn)

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

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

這其中要用到 ImageIO 類,這是一個(gè)靜態(tài)類,提供了一系列方法用來讀和寫圖像,同時(shí)還可以對圖像進(jìn)行簡單的編碼和解碼。

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

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

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

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

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

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

緊接著,可以對 ImageWriter 進(jìn)行一些參數(shù)配置,比如說壓縮模式,壓縮質(zhì)量等等。

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

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

setCompressionQuality() 方法的參數(shù)是一個(gè) 0-1 之間的數(shù),0.0 表示盡最大程度壓縮,1.0 表示保證圖像質(zhì)量很重要。對于有損壓縮方案,壓縮質(zhì)量應(yīng)該控制文件大小和圖像質(zhì)量之間的權(quán)衡(例如,通過在寫入 JPEG 圖像時(shí)選擇量化表)。 對于無損方案,壓縮質(zhì)量可用于控制文件大小和執(zhí)行壓縮所需的時(shí)間之間的權(quán)衡(例如,通過優(yōu)化行過濾器并在寫入 PNG 圖像時(shí)設(shè)置 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();         }     } }

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

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

可以看得出,質(zhì)量因子為 0.01f 的時(shí)候圖片已經(jīng)有些失真了,可以適當(dāng)提高質(zhì)量因子比如說 0.5f,再來看一下。

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

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

四、其他開源庫

接下來,推薦一些可以輕松集成到項(xiàng)目中的圖像處理庫吧,它們?nèi)际敲赓M(fèi)的。

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

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

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

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

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

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

4)OpenCV,由BSD許可證發(fā)布,可以免費(fèi)學(xué)習(xí)和商業(yè)使用,提供了包括 C/C++、Python 和 Java 等主流編程語言在內(nèi)的接口。OpenCV 專為計(jì)算效率而設(shè)計(jì),強(qiáng)調(diào)實(shí)時(shí)應(yīng)用,可以充分發(fā)揮多核處理器的優(yōu)勢。

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

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

第一步,添加 OpenCV 依賴到我們的項(xiàng)目當(dāng)中,以 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 的構(gòu)造參數(shù)是一個(gè)可變參數(shù),第一個(gè)參數(shù) IMWRITE_JPEG_QUALITY 表示對圖片的質(zhì)量進(jìn)行改變,第二個(gè)是質(zhì)量因子,1-100,值越大表示質(zhì)量越高。

執(zhí)行代碼后得到的圖片如下所示:

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

借這個(gè)機(jī)會,來對比下 OpenCV 和 JDK 原生 API 在壓縮圖像時(shí)所使用的時(shí)間。

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

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

結(jié)果如下所示:

opencvCompress壓縮完成,所花時(shí)間:1070
jdkCompress壓縮完成,所花時(shí)間:322

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

java實(shí)例解析之1M圖片壓縮優(yōu)化到100kb

推薦學(xué)習(xí):《java視頻教程》

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
日韩精品视频一区二区在线观看| 黄色一级片网址| 亚洲色婷婷久久精品av蜜桃| 日韩中文字幕a| 欧美伦理视频在线观看| 欧美在线观看视频网站| av日韩在线看| 国产原创popny丨九色| aa视频在线播放| 99蜜桃臀久久久欧美精品网站| 99在线精品免费视频| 日韩少妇内射免费播放18禁裸乳| 菠萝蜜视频在线观看入口| 国产xxxxhd| 国产午夜伦鲁鲁| 蜜臀一区二区三区精品免费视频| 91av在线免费播放| www.激情网| 亚洲啊啊啊啊啊| 久久久久久久久久一区| 国产v片免费观看| 91香蕉视频导航| 少妇人妻在线视频| 国产大尺度在线观看| 国产青青在线视频| 欧美另类videosbestsex日本| 日韩精品―中文字幕| 老汉色影院首页| 国产精品区在线| 在线观看日本一区二区| 黄色动漫在线免费看| 五月丁香综合缴情六月小说| 久久久久久蜜桃一区二区| 国产青青在线视频| 久激情内射婷内射蜜桃| 国产一区二区视频播放| 4444亚洲人成无码网在线观看| 国产三级生活片| 色婷婷一区二区三区av免费看| 黄色三级视频片| 国产精品宾馆在线精品酒店| 欧美精品久久久久久久免费| 国产av熟女一区二区三区| 国内精品国产三级国产aⅴ久| 成年人网站av| 成人在线视频一区二区三区 | 色撸撸在线观看| www.超碰97.com| 日本老太婆做爰视频| 中文字幕色网站| 欧美性受xxxx黑人猛交88| 国产中文字幕视频在线观看| 99精品视频网站| 大荫蒂性生交片| 欧美 日韩 国产一区| 最新中文字幕久久| 97国产在线播放| 久久综合伊人77777麻豆最新章节| 污视频网站观看| 久久观看最新视频| 99re99热| 国内精品国产三级国产aⅴ久| 日韩一级特黄毛片| 日本三区在线观看| www.亚洲自拍| 狠狠干狠狠操视频| 无码人妻精品一区二区三区66| 九九九九九国产| 国产美女三级视频| 成人免费在线小视频| 成人小视频在线观看免费| 日韩一级免费片| avav在线看| 无尽裸体动漫2d在线观看| 老子影院午夜伦不卡大全| 一级 黄 色 片一| 成人免费观看视频在线观看| 国产黄色一级网站| 一本一道久久a久久综合蜜桃| 男人天堂成人在线| 婷婷六月天在线| 路边理发店露脸熟妇泻火| 国产日韩亚洲欧美在线| 黄在线观看网站| 欧美日韩中文不卡| 中文字幕色呦呦| 无码人妻h动漫| 黄黄视频在线观看| 91国视频在线| 久久香蕉视频网站| 国产三级日本三级在线播放| 国产盗摄视频在线观看| 岳毛多又紧做起爽| 中文字幕一区二区三区四区五区人| 亚洲精品中文字幕乱码无线| 久久综合久久久久| 午夜大片在线观看| 加勒比成人在线| 亚洲一区 在线播放| 成年人免费观看的视频| www.欧美日本| 亚洲第一中文av| 色综合色综合色综合色综合| 91av在线免费播放| 少妇一级淫免费放| 污片在线免费看| 成人性生交免费看| 99精品视频网站| www.av毛片| 免费大片在线观看| 在线观看免费视频污| 日本免费a视频| 熟妇人妻va精品中文字幕| 国产裸体舞一区二区三区| 国产精品无码一本二本三本色| 日本在线视频www| 婷婷视频在线播放| 漂亮人妻被中出中文字幕| 亚洲免费看av| 少妇av一区二区三区无码| 亚洲精品一二三四五区| 97av中文字幕| 亚洲中文字幕无码中文字| www,av在线| 99亚洲精品视频| 欧美一区二区视频在线播放| 国产免费毛卡片| 日本熟妇人妻xxxx| 大地资源网在线观看免费官网| 日韩精品一区二区三区色欲av| 亚洲无在线观看| 香蕉视频xxx| 欧美在线aaa| 色哺乳xxxxhd奶水米仓惠香| wwwwwxxxx日本| 四虎永久免费网站| 超碰在线超碰在线| 久久久久亚洲av无码专区喷水| 狠狠热免费视频| 400部精品国偷自产在线观看| 国产精品久久a| www.xxx亚洲| 97在线免费视频观看| 日韩精品视频网址| 国产精品视频一二三四区| 久久手机在线视频| 午夜精品久久久内射近拍高清| 亚洲熟妇av一区二区三区| 亚洲欧美另类动漫| 超碰在线免费观看97| 屁屁影院ccyy国产第一页| 日韩精品xxxx| 特级黄色录像片| 欧美少妇性生活视频| wwwwww欧美| 在线免费黄色网| 久久久精品在线视频| 日韩视频在线观看一区二区三区| 欧美黄色免费网址| 中文字幕一区二区三区四区五区人| 亚洲免费视频播放| 久久av秘一区二区三区| www.超碰com| 日韩在线第三页| 欧美成人免费高清视频| 99视频在线免费播放| 国产又粗又猛又爽又黄的网站| 91精品视频国产| av中文字幕网址| 国产精品av免费| www.-级毛片线天内射视视| 丝袜制服一区二区三区| 中文字幕 91| 五月天综合婷婷| 被灌满精子的波多野结衣| 国产精品视频二| 久久久久久免费看| 国产91对白刺激露脸在线观看| 国风产精品一区二区| 日韩视频免费播放| 亚洲 欧美 另类人妖| 久久www视频| 亚洲77777| 99999精品视频| 日韩不卡一二区| 粉嫩虎白女毛片人体| 亚洲AV无码成人精品一区| 国产青青在线视频| 国产精品久久成人免费观看| 777精品久无码人妻蜜桃| 日本免费色视频| 日韩精品一区二区在线视频| 女人扒开屁股爽桶30分钟| 三日本三级少妇三级99| 国产在线精品91| 一区二区传媒有限公司| 丁香婷婷综合激情| 男人添女荫道口女人有什么感觉| 黄色片免费网址| 久久av喷吹av高潮av|