[英]How to Compress and reduce Quality of image using Glide for android
[英]Compress JPEG image to specific quality level without using Bitmap#compress() method
我想將位圖(JPEG圖像)壓縮到質量64
,結果存儲在字節數組中。 以前,我可以使用Bitmap#compress()
方法實現此目的:
public static byte[] compressJPEG(Bitmap bmp, int quality) {
if (quality <= 0)
return new byte[0];
byte[] array = new byte[0];
try {
ByteArrayOutputStream bmpStream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, quality, bmpStream);
array = bmpStream.toByteArray();
bmpStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return array;
}
但是當我在不同設備上運行時,結果字節數組(具有相同的輸入圖像文件)是不同的。 (可能是因為它內部使用了nativeCompress()
)
檢查后,我發現霍夫曼表,SOS和圖像數據部分有所不同,請參見: 在2張圖像照片之間進行差異檢查
那么如何在不使用Bitmap#compress()
方法的情況下將JPEG圖像壓縮到特定的質量級別? 因為我真的希望結果字節數組在結構上相似。
JPEG中沒有“質量級別”的概念。 一些編碼器用來選擇量化表的簡寫形式。 JPEG壓縮中有許多變量,包括掃描的類型和分類,樣本,霍夫曼表選擇和量化表選擇。 如果您使用的編碼器中的任何一個不同,您將獲得不同的輸出。 這是野獸的天性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.