【问题标题】:Reduce size of a large JPEG without changing resolution在不更改分辨率的情况下减小大型 JPEG 的大小
【发布时间】:2013-06-26 15:37:36
【问题描述】:

我的相机有一个 3264x1952 的 JPEG。这个文件大约 1.7 兆字节。

我想知道是否可以将此图像压缩为较小的文件大小而不更改分辨率。即我希望我的结果图像也是 3264x1952。

如果不使用 inSampleSize 选项缩小图像,我什至无法将此 JPEG 作为位图打开。

有人知道我的选择是什么吗?有什么办法可以降低颜色位深/增加压缩率/降低质量?

编辑: 我正在专门寻找适用于 Android 的解决方案。主要问题是我无法打开完整的 res JPEG 而不会遇到 OOM 错误,所以我不知道如何继续。

理想情况下我想这样做:

bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out);

但是当我这样做时应用程序会崩溃:

Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

【问题讨论】:

  • 然后降低你的图像质量..
  • @Segi 我无法降低图像质量,因为我一开始就无法将文件作为位图打开...
  • 然后把你的代码写进去..
  • @Segi 添加了一些代码。

标签: java android


【解决方案1】:

您可以使用BitmapFactory.decodeFile 方法将BitmapFactory.Options 对象作为第二个参数,并使用inSampleSize 来缩放图像。例如,inSampleSize = 2 将生成 width/2height/2, 的输出图像。请记住,您的位图始终需要width x heigth x 4 字节的内存

【讨论】:

    【解决方案2】:

    您需要缩小图像。

    http://developer.android.com/training/displaying-bitmaps/load-bitmap.html.

    使用适当的Bitmap.decode 方法并缩小图像。

    Bitmap.decode

    例子:

    使用所需参数调用方法。

    public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){
     try {
         //Decode image size
         BitmapFactory.Options o = new BitmapFactory.Options();
         o.inJustDecodeBounds = true;
         BitmapFactory.decodeStream(new FileInputStream(f),null,o);
    
         //The new size we want to scale to
         final int REQUIRED_WIDTH=WIDTH;
         final int REQUIRED_HIGHT=HIGHT;
         //Find the correct scale value. It should be the power of 2.
         int scale=1;
         while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT)
             scale*=2;
    
         //Decode with inSampleSize
         BitmapFactory.Options o2 = new BitmapFactory.Options();
         o2.inSampleSize=scale;
         return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
     } catch (FileNotFoundException e) {}
     return null;
    }
    

    【讨论】:

      【解决方案3】:

      我认为您想使用BitmapFactory.decodeStream,从 JPEG 文件中获取流。您可以在返回位图之前修改密度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-08
        • 2011-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 2016-02-22
        相关资源
        最近更新 更多