Bitmap.compress 不会减少字节数
Bitmap.compress doesn't decrease the Byte count
我需要压缩图像以将其发送到我的服务器。我正在尝试这样做:
private Bitmap compressImage(Bitmap bitmapImg){
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmapImg.compress(Bitmap.CompressFormat.JPEG, 50, out);
Bitmap compressed = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));
return compressed;
}
但是当我比较原始位图对象和压缩后的位图对象的字节数时,我得到相同的数字:
Log.e("UNCOMPRESSED", Integer.toString(mBitmapImg.getByteCount()));
E/UNCOMPRESSED: 23970816
Log.e("COMPRESSED", Integer.toString(compressedBitmapImg.getByteCount()));
E/COMPRESSED: 23970816
我怎样才能解决这个问题以获得更小的文件?
But when I compare the Byte count of the original Bitmap object and the compressed one, I get the same number:
Bitmap
在内存中的大小基于仅 其分辨率(以像素为单位的宽度和高度)和位深度(每个像素的字节数,用于控制每个像素可以使用多少种颜色)。
How can I fix this to have a smaller file?
您没有文件。您在内存中有一个 Bitmap
对象。图像文件通常以压缩形式存储。特别是 JPEG、PNG、WebP 和 GIF,Android 中使用的四种主要图像格式。因此,例如,out.toByteArray()
将小于 23,970,816 字节。
此外,您没有向服务器发送 Bitmap
。您正在向服务器发送图像。您需要阅读服务器的文档,或与服务器开发人员交谈,以确定他们支持哪些图像格式以及如何将图像发送到服务器(理想情况下,像 HTTP PUT 这样高效的东西)。
如果您想减小 Bitmap
的内存大小,请将其缩放为较低分辨率的图像(例如,通过 createScaledBitmap()
)。
您可以将位图格式从 ARGB_8888
更改为 RGB_565
。这会将位图的内存占用减少一半,但也会导致质量下降。不幸的是,这是您使用 Bitmap
.
所能做的最多的事情
话虽如此,您使用的压缩方法应该适用于大多数情况。这也是许多平台提倡的方法。 Firebase 的一个示例是 this.
我需要压缩图像以将其发送到我的服务器。我正在尝试这样做:
private Bitmap compressImage(Bitmap bitmapImg){
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmapImg.compress(Bitmap.CompressFormat.JPEG, 50, out);
Bitmap compressed = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));
return compressed;
}
但是当我比较原始位图对象和压缩后的位图对象的字节数时,我得到相同的数字:
Log.e("UNCOMPRESSED", Integer.toString(mBitmapImg.getByteCount()));
E/UNCOMPRESSED: 23970816
Log.e("COMPRESSED", Integer.toString(compressedBitmapImg.getByteCount()));
E/COMPRESSED: 23970816
我怎样才能解决这个问题以获得更小的文件?
But when I compare the Byte count of the original Bitmap object and the compressed one, I get the same number:
Bitmap
在内存中的大小基于仅 其分辨率(以像素为单位的宽度和高度)和位深度(每个像素的字节数,用于控制每个像素可以使用多少种颜色)。
How can I fix this to have a smaller file?
您没有文件。您在内存中有一个 Bitmap
对象。图像文件通常以压缩形式存储。特别是 JPEG、PNG、WebP 和 GIF,Android 中使用的四种主要图像格式。因此,例如,out.toByteArray()
将小于 23,970,816 字节。
此外,您没有向服务器发送 Bitmap
。您正在向服务器发送图像。您需要阅读服务器的文档,或与服务器开发人员交谈,以确定他们支持哪些图像格式以及如何将图像发送到服务器(理想情况下,像 HTTP PUT 这样高效的东西)。
如果您想减小 Bitmap
的内存大小,请将其缩放为较低分辨率的图像(例如,通过 createScaledBitmap()
)。
您可以将位图格式从 ARGB_8888
更改为 RGB_565
。这会将位图的内存占用减少一半,但也会导致质量下降。不幸的是,这是您使用 Bitmap
.
话虽如此,您使用的压缩方法应该适用于大多数情况。这也是许多平台提倡的方法。 Firebase 的一个示例是 this.