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方法解码来自http位置的图像?
- 2. 快速解码JPEG图像的方法
- 3. 解码从PDF文件内部剥离的JPEG图像
- 4. JPEG图像压缩
- 5. 解压缩文件夹并从解压缩文件中获取图像
- 6. Mule esb文件压缩/编码和解压缩/解码
- 7. FileNotFoundException解压文件时
- 8. jpeg图像的快速解压缩和重新缩放算法
- 9. 从PixelData值(DCMTK)开始解压缩JPEG DICOM图像
- 10. 下载的文件已损坏 - 解释JPEG图像文件的错误(不是JPEG文件:以0xef 0xbf开头)
- 11. 解码JPEG为char *
- 12. 如何解压/解压缩文件
- 13. 调整jpeg图像大小是否会影响其压缩?
- 14. 如何确定JPEG图像是否已被重新压缩?
- 15. 图像解码
- 16. Java LZW压缩和解压缩图像
- 17. RLE使用java压缩解压图像
- 18. 解压缩文件
- 19. 解压缩文件
- 20. pyrocms文件url不解码图像
- 21. 解码C#中的JFIF图像文件
- 22. 从JPEG解析图像大小
- 23. 使用libjpegturbo解压缩jpeg返回“空输入文件”
- 24. 解压缩(解压缩)由.net压缩(解压缩)的文件.net system.io.compression.gzipstream
- 25. 调整图片大小(jpeg或解压图片)
- 26. 在Android中解码jpeg
- 27. 在web worker中解码JPEG
- 28. tensorflow为什么解码jpeg图像与scipy imread不同?
- 29. 如何检索F#中的JPEG图像编解码器?
- 30. C#:使用Silverlight FJCore库以12位精度解码JPEG图像?