JPEG是一種壓縮格式。 將BitmapFactory.decodeFile(「JPEG文件的路徑」)解碼爲內存中的位圖時,是否解壓JPEG圖像? 當我從解碼的JPEG文件生成的位圖上使用Bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream)
時,則壓縮圖像的大小大於原始圖像的大小。任何人都可以解釋這種現象嗎?解碼時,BitmapFactory.decodeFile()文件是否解壓JPEG圖像?
回答
BitmapFactory.decodeFile(「指向JPEG文件的路徑」)是否在將JPEG圖像解碼爲內存中的位圖時將其解壓縮?
是。
當我在從解碼後的JPEG文件生成位圖使用Bitmap.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream),則壓縮的圖像的尺寸比原始圖像的尺寸更
這是非常可能的。質量等級爲100時,我會考慮它的可能性,雖然也許沒有保證。
任何人都可以解釋這種現象嗎?
沒有要求它們對於JPEG是相同的。實際上,如果他們都是一樣,它幾乎是隨機的。
假設我們從內存映像開始(B 原始,其中B是位圖的簡寫)。然後,我們將該圖像壓縮爲JPEG(J 原始)。 JPEG採用有損壓縮算法,通過考慮人眼無法辨別少量變化的事實,在實際圖像(例如照片)上實現更好的壓縮。
假設我們則J 原始回解碼成一個內存中的位圖(B 重新加載)。 B 重新加載將不會是相同的圖像作爲B 原來,因爲JPEG壓縮會改變圖像。 B 重新加載是B 原始將取決於各種因素,部分與圖像本身有關,部分與保存JPEG(100
代碼中使用的質量級別)有關。質量等級從0到100,其中100表示最高質量。
如果我們然後壓縮乙重載到第二JPEG(j 重新加載),新的JPEG 不會是相同作爲原始JPEG(j 原始)。部分原因是,這是因爲根據前面的段落,源位圖發生了變化。部分原因是,這是因爲我們可能不會選擇與原始壓縮工作相同的質量級別。
在你的情況下,你沒有創建J 原始。您不一定知道使用了哪種質量等級(信息可能存儲在JPEG標頭中;我忘記了)。但是因爲B 重新加載將不同於原始位圖(無論它來自何處),當您將位圖壓縮爲J 重新加載時,它將與原始的J 不同。總體而言,不論是大還是小,都難以抽象地說。但是,由於您選擇的質量級別爲100,並且J 原始很可能已經以較低的質量級別壓縮,所以您的壓縮圖像很容易變大。
這與Android無關。這純粹是JPEG如何工作的功能。如果您還有關於JPEG本身的其他問題,您可能希望read more about JPEG,並在某些網站上提出與圖像格式有關的問題。
- 1. 使用BitmapFactory.decodeFile()但圖像不解碼
- 2. 是否可以使用BitmapFactory.decodeFile方法解碼來自http位置的圖像?
- 3. 嘗試壓縮圖像(Gzip + Jpeg),然後解壓縮它們
- 4. 快速解碼JPEG圖像的方法
- 5. 解碼從PDF文件內部剝離的JPEG圖像
- 6. JPEG圖像壓縮
- 7. 解壓縮文件夾並從解壓縮文件中獲取圖像
- 8. Mule esb文件壓縮/編碼和解壓縮/解碼
- 9. FileNotFoundException解壓文件時
- 10. jpeg圖像的快速解壓縮和重新縮放算法
- 11. 從PixelData值(DCMTK)開始解壓縮JPEG DICOM圖像
- 12. 在調整圖像大小時解碼器JPEG錯誤
- 13. 解壓文件
- 14. 下載的文件已損壞 - 解釋JPEG圖像文件的錯誤(不是JPEG文件:以0xef 0xbf開頭)
- 15. 解碼JPEG爲char *
- 16. 如何解壓/解壓縮* .z文件
- 17. 如何解壓/解壓縮文件
- 18. 可重複像素完美JPEG解碼
- 19. 壓縮文件未解壓
- 20. 解碼圖像時出錯
- 21. 調整jpeg圖像大小是否會影響其壓縮?
- 22. 如何確定JPEG圖像是否已被重新壓縮?
- 23. 使用Python圖像庫時,open()會立即解壓縮圖像文件嗎?
- 24. Python解壓縮文件並檢查文件是否存在
- 25. 圖像解碼
- 26. 解壓文件.fsd
- 27. 解壓縮文件
- 28. 解壓* .Z文件
- 29. 解壓縮文件
- 30. Java LZW壓縮和解壓縮圖像