日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android 基于Bitmap的四種圖片壓縮方式

瀏覽:12日期:2022-09-18 17:22:37
目錄知識點介紹正文1、質量壓縮2、采樣率壓縮3、縮放法壓縮4、RGB_565 通過改變圖片格式來實現壓縮總結知識點介紹

Android 中圖片主要以 Bitmap 的形式存在,所以壓縮圖片主要就是減少 Bitmap 的大小。Bitmap 的大小可以通過如下的公式計算得到:size = width * height * 單個像素所占字節數。因此壓縮圖片通過改變公式中的三個變量即可實現。

單個像素所占空間大小在 Android 中有多種,詳見如下

格式 所占空間 說明 Bitmap.Config.ALPHA_8 1B 該種格式表示圖片只有透明度沒有顏色,1個像素占用8位 Bitmap.Config.ARGB_4444 2B 該種格式表示圖片透明通道 A 及顏色 R、G、B 各占用4位,共16位 Bitmap.Config.ARGB_8888 4B 該種格式表示圖片透明通道 A 及顏色 R、G、B 各占用8位,共32位 Bitmap.Config.RGB_565 2B 該種格式表示圖片沒有透明通道,顏色 R、G、B 各占用5、6、6位,共16位

Android 中加載圖片默認用的是 ARGB_8888 格式,所以加載一張3000 * 4000 的圖片默認占用的空間為 45MB 左右,這個值還是很大的😂

測試代碼

fun showBitmapInfo(bitmap: Bitmap){Log.d('Tag','壓縮后的圖片大小:${bitmap.byteCount/1024/1024}MB,寬度:${bitmap.width},高度:${bitmap.height}')}

結果

Android 基于Bitmap的四種圖片壓縮方式

正文

接下來介紹四種壓縮方式

1、質量壓縮

質量壓縮主要通過 Bitmap.compress()實現,方法介紹

/**** @param format 壓縮圖像的格式* @param quality 提示壓縮機,0-100。 根據Bitmap.CompressFormat不同,該值的解釋也不同。* @param stream ?寫入壓縮數據的輸出流。* @return 如果成功壓縮到指定的流,則為true*/public boolean compress(CompressFormat format, int quality, OutputStream stream) {}

CompressFormat 表示圖片壓縮格式,Android 源碼中包含了五種格式

格式名 解釋 CompressFormat.JPEG 壓縮為JPEG格式。 quality 0表示壓縮為最小大小。 100表示壓縮以獲得最大視覺質量。 CompressFormat.PNG 壓縮為PNG格式。 PNG是無損的,因此quality被忽略。 CompressFormat.WEBP 壓縮為WEBP格式。 quality 0表示壓縮為最小大小。 100表示壓縮以獲得最大視覺質量。 從Build.VERSION_CODES.Q ,值100導致文件采用無損WEBP格式。 否則,文件將為有損WEBP格式 CompressFormat.WEBP_LOSSY 壓縮為WEBP有損格式。 quality 0表示壓縮為最小大小。 100表示壓縮以獲得最大視覺質量。 CompressFormat.WEBP_LOSSLESS 壓縮為WEBP無損格式。 quality是指投入多少精力進行壓縮。 值0表示快速壓縮,導致文件大小相對較大。 100表示要花費更多時間進行壓縮,從而使文件更小。

測試代碼

/** * 壓縮圖片質量*/fun getCompressBitmap(bitmap: Bitmap,quality:Int): Bitmap { val baos = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos) val byte = baos.toByteArray() val ins = ByteArrayInputStream(byte) val bm = BitmapFactory.decodeStream(ins) ins.close() baos.close() return bm}

效果

Android 基于Bitmap的四種圖片壓縮方式

Android 基于Bitmap的四種圖片壓縮方式

根據上面的日志,你會看到質量壓縮并不能改變圖片在內存中的大小,因為質量壓縮既不能改變圖片分辨率也不能改變圖片的單個像素大小。

那么你可能有些疑問:既然不能改變大小,那么還費這么大功夫轉化而且圖片還失真是為了什么?

答:源碼中對于compress方法的解釋是,將位圖的壓縮版本寫入指定的輸出流。所以應該是對輸出流中的字節數有影響

驗證

val baos = ByteArrayOutputStream()bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos)val byte = baos.toByteArray()Log.d('Tag','quality=$quality,byte-size=${byte.size}')

結果真的是對輸出流的字節數有影響

Android 基于Bitmap的四種圖片壓縮方式

2、采樣率壓縮

BitmapFactory.Options 中有個屬性 inSampleSize,系統中采樣率壓縮就是通過該屬性

/*** 如果設置為大于1的值,則請求解碼器對原始圖像進行二次采樣,返回較小的圖像以節省內存。* 樣本大小是任一維度中與解碼后的位圖中的單個像素相對應的像素數。 例如,inSampleSize == 4* 返回的圖像為原始寬度/高度的1/4,像素數目的1/16。 任何小于等于1的值都與1相同。* 注意:解碼器使用基于2的冪的最終值,任何其他值將四舍五入為最接近的2的冪。**/ public int inSampleSize;

直接上代碼

/** * 根據設定的寬高計算縮放比 */ fun calculateInSampleSize(options: BitmapFactory.Options, reqWidth: Int, reqHeight: Int): Int {val height = options.outHeightval width = options.outWidthvar inSampleSize = 1if (height > reqHeight || width > reqWidth) { val heightRatio = round(height.toFloat() / reqHeight.toFloat()).toInt() val widthRatio = round(width.toFloat() / reqWidth.toFloat()).toInt() inSampleSize = if (heightRatio < widthRatio) heightRatio else widthRatio}return inSampleSize } /** * 獲取縮放后的圖片 */ fun getSmallBitmap(filePath: String,reqWidth: Int,reqHeight: Int): Bitmap {val options = BitmapFactory.Options()options.inJustDecodeBounds = true //不加載 bitmap 進內存,只獲取他的基本信息BitmapFactory.decodeFile(filePath, options)options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight)options.inJustDecodeBounds = falsereturn BitmapFactory.decodeFile(filePath, options) }

結果

Android 基于Bitmap的四種圖片壓縮方式

采樣率壓縮的方式使用的還是挺多的,因為我們獲取到的圖片它的尺寸可能很大,但是我們在手機上顯示的可能不需要那么大,那我們就將圖片縮放成我們需要的大小。

3、縮放法壓縮

這種方法主要是依賴 Matrix 矩陣變換的方式對圖片進行處理。Matrix 中有很多對圖片變換的 api 這里只使用它的縮放功能,其他功能可以自行了解

代碼

/** * 通過矩陣縮放 */ fun matrixBitmap(bitmap: Bitmap,scale:Float):Bitmap{val matrix = Matrix()matrix.setScale(scale,scale)var bm = Bitmap.createBitmap(bitmap,0,0,bitmap.width,bitmap.height,matrix,true)return bm }

當設置縮放比為0.5時,圖片整體就縮放為原來的1/4

Android 基于Bitmap的四種圖片壓縮方式

4、RGB_565 通過改變圖片格式來實現壓縮

系統默認使用的是ARGB_8888的格式,所以我們只要改變這個 options 值就能實現

fun rgb565Bitmap(filePath: String):Bitmap{val options = BitmapFactory.Options()options.inPreferredConfig = Bitmap.Config.RGB_565var bitmap = BitmapFactory.decodeFile(filePath,options)return bitmap}

結果圖片變成了原圖的一半

Android 基于Bitmap的四種圖片壓縮方式

總結

對于圖片的壓縮,首先可以先將圖片格式改為 RGB_565,這樣圖片先減小一半,然后對于圖片的顯示可以使用采樣率壓縮或者縮放壓縮的方式將圖片的分辨率改為我們顯示的大小,如果是要將圖片上傳服務器那么可以使用質量壓縮的方式,但是這種方式不支持 png 格式的圖片。

以上就是Android 基于Bitmap的四種圖片壓縮方式的詳細內容,更多關于Android Bitmap圖片壓縮的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩中文字幕区一区有砖一区 | 亚洲成人av观看| 久久国际精品| 欧美一区自拍| 国产精品久久久久久av公交车| 国产日韩欧美一区| 久久精品国内一区二区三区| 精品视频91| 手机在线电影一区| 色88888久久久久久影院| 精品丝袜在线| 妖精视频成人观看www| 日韩中文字幕1| 日韩成人精品一区二区三区| 日韩av电影一区| 国产精品三级| 福利一区二区三区视频在线观看| 国产+成+人+亚洲欧洲在线| 午夜av不卡| 国产高清一区二区| 中文不卡在线| 少妇精品久久久一区二区三区| 只有精品亚洲| 国产精品亚洲综合久久| 国产成人精品亚洲线观看| 日韩网站中文字幕| 91成人精品| 亚洲v天堂v手机在线| 国产精品入口久久| 成人午夜亚洲| 免费精品国产的网站免费观看| 国产婷婷精品| 国产日产精品_国产精品毛片| 激情中国色综合| 午夜精品一区二区三区国产| 日韩成人在线看| 成人三级高清视频在线看| 国产高清久久| 欧美日韩一区二区高清| 丝袜美腿一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美在线看片| 午夜久久中文| 亚洲精品第一| 日本久久综合| 视频一区在线播放| 久久女人天堂| 国产一区二区高清| 美女精品一区二区| 欧美午夜不卡| 麻豆国产精品一区二区三区| 尤物在线精品| 国产精品17p| 亚洲精品小说| 麻豆精品蜜桃视频网站| 久久久夜夜夜| 日本午夜精品久久久| 亚洲a一区二区三区| 日韩高清电影一区| 亚洲大全视频| 麻豆精品在线视频| 亚洲深深色噜噜狠狠爱网站| 成人一二三区| 亚洲精品在线国产| 久久精品欧美一区| 国产剧情在线观看一区| 欧美日韩免费观看一区=区三区| 国产精品久久久免费| 香蕉成人久久| 欧美freesex黑人又粗又大| 亚洲久久在线| 99热精品久久| 精品久久97| 日韩福利在线观看| 亚洲一区中文| 日韩高清中文字幕一区二区| 国产精品一区2区3区| 一区二区电影在线观看| 激情欧美日韩一区| 精品视频在线你懂得| 日本h片久久| 欧美高清不卡| 国产一区二区三区四区二区| 日本国产欧美| 成人国产精品一区二区免费麻豆| 免费人成精品欧美精品| 久久中文字幕av| 精品一区二区三区的国产在线观看| 免费观看日韩电影| 国产一区二区三区四区五区传媒| 免费精品视频| 91精品1区| 日韩欧美国产精品综合嫩v| 国产欧美日韩视频在线| 一二三区精品| 中文久久精品| 欧美a级一区| 久久影视一区| 久久精品天堂| 欧美日韩亚洲国产精品| 免费在线看一区| 91精品精品| 精品高清久久| 国产精品久久久网站| 午夜在线播放视频欧美| 国产一区二区三区视频在线| 亚洲精品在线国产| 日韩中文字幕一区二区三区| 四季av一区二区凹凸精品| 亚洲久久视频| 婷婷久久一区| 欧美69视频| 精品久久久亚洲| 日韩精品一区二区三区免费视频 | 另类小说一区二区三区| 麻豆久久精品| 久久精品国内一区二区三区水蜜桃| 欧美亚洲tv| 噜噜噜躁狠狠躁狠狠精品视频| 999久久久91| 国语对白精品一区二区| 亚洲精品成a人ⅴ香蕉片| 欧美午夜不卡| 婷婷六月综合| 四虎影视精品| 精品一区二区三区视频在线播放| 日韩国产一二三区| 日韩av成人高清| av亚洲在线观看| 老司机精品视频网| 国产欧美69| 麻豆视频一区二区| 欧美精品影院| 91精品国产自产精品男人的天堂 | 亚洲欧美日本日韩| 国产模特精品视频久久久久| 亚洲一区资源| 欧美xxxx中国| а√天堂8资源在线| av在线资源| 国产伦一区二区三区| 亚洲综合五月| 蜜臀久久久99精品久久久久久| 中文字幕亚洲影视| 视频在线在亚洲| 国产精品日韩| 精品91久久久久| 亚洲影视一区二区三区| 综合日韩在线| 亚洲精品少妇| 亚洲精品系列| 国产麻豆精品| 国产精品天天看天天狠| 欧美视频久久| 国产美女久久| 久久99久久久精品欧美| 国产精品jk白丝蜜臀av小说| 国产日韩视频在线| 国产精品亚洲一区二区在线观看| 久久精品超碰| 在线一区av| 久久蜜桃精品| 日韩精品一区二区三区免费观影 | 99视频精品视频高清免费| 蜜臀91精品国产高清在线观看| 亚洲成av人片一区二区密柚| 久久视频精品| 日韩专区欧美专区| 国产欧美精品| 日韩精品久久久久久| 欧美偷窥清纯综合图区| 久久永久免费| 亚洲午夜精品久久久久久app| 性欧美69xoxoxoxo| 免费日韩一区二区| 91九色综合| 亚洲va中文在线播放免费| 久久精品卡一| 久久av在线| 国产精品资源| 久久久噜噜噜| 国产精品日本| 日韩中文字幕| 国产精品99精品一区二区三区∴ | 日本亚洲视频| 国产精品天堂蜜av在线播放| 成人台湾亚洲精品一区二区| 免费精品国产的网站免费观看| 日韩激情中文字幕| 久久精品一本| 激情欧美一区二区三区| 久久午夜影视| 日韩综合一区| 亚洲激情五月| 日韩不卡一二三区| 1024精品一区二区三区| 午夜视频一区二区在线观看| 久久99精品久久久久久园产越南 | 国产精品久久免费视频| 欧美日韩精品在线一区|