【问题标题】:How to Compress captured image to a specific size in Android?如何在 Android 中将捕获的图像压缩为特定大小?
【发布时间】:2015-12-06 05:13:04
【问题描述】:

我正在使用我的 Android 相机拍摄图像,但相机是 8 MP,所以我得到大约 4-5 MB jpeg 图像。因此,我尝试使用以下代码将它们压缩到 1 MB。

data 包含 jpeg 格式的图片,baosByteArrayOutputStream 类型。

while ( data.length > 1 * 1024  * 1024 )
{
    System.gc();
    Log.e(TAG,"Data size "+ (data.length/1024));
    bitmapData.compress(CompressFormat.JPEG, compressionRatio, baos);
    data = baos.toByteArray();
    Log.e(TAG,"Data size "+ (data.length/1024));
    compressionRatio -= 5 ;
}

它允许我捕捉一些图像,但在几张照片之后,应用程序崩溃并显示错误日志Out of memory。 谁能提供一个更好的压缩JPEG的解决方案。

谢谢你

【问题讨论】:

  • 只需使用 FileOutputStream out = new FileOutputStream(file); bm.compress(Bitmap.CompressFormat.JPEG, 90, out);
  • 在前两个解决方案中,我不会得到 JPEG 图像的最终尺寸。因此,我无法根据 .jpeg 的大小进行压缩。在@SubbaReddyPolamReddy 的解决方案中,写入外部存储设备需要很长时间并且会减慢进程。
  • 你使用设备或日食...它不会慢...

标签: java android camera android-camera image-compression


【解决方案1】:

您提供的解决方案的问题是位图正在分配所有内存。您需要做的是将此添加到循环的末尾。

bitmapData.recycle();
System.gc();

这会将位图标记为已死并准备好进行垃圾收集,并手动调用垃圾收集器。

【讨论】:

    【解决方案2】:

    老问题,但我希望这对某人有所帮助。将此代码添加到循环开始将重置 byteArrayOutputStream(baos):

    baos.reset();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2013-09-03
      • 2015-05-09
      • 1970-01-01
      相关资源
      最近更新 更多