图像压缩,同时保持质量

时间:2016-03-28 13:39:41

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

我正在制作一个自定义相机,拍摄文件并通过网络发送。然后对图像进行OCR。要通过网络发送它们,它们必须是小尺寸(小于100 Kb)。我首先缩小图像然后转换为灰度并压缩到JPG 100%。图像尺寸仍然超过100Kb。如果我降低JPG压缩百分比,那么质量非常糟糕。如何解决这个问题。这是代码:

//图像缩放

 public static Bitmap decodeSampledBitmapFromResource(byte[] data,
                                                         int reqWidth, int reqHeight) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeByteArray(data, 0, data.length, options);
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
        options.inJustDecodeBounds = false;
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        return BitmapFactory.decodeByteArray(data, 0, data.length, options);
    }

//图像灰度。使用renderscript

uchar grayscale = pixelIn.r * 0.299 + pixelIn.g * 0.587 + pixelIn.b * 0.114;

uchar4 pixelOut;
pixelOut.a = pixelIn.a;
pixelOut.r = grayscale;
pixelOut.g = grayscale;
pixelOut.b = grayscale;

return pixelOut;

// JPG压缩

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);

4 个答案:

答案 0 :(得分:2)

看看this文章,我相信你会得到你想要的东西。

答案 1 :(得分:0)

如果你使用Bitmap.CompressFormat.PNG,你有什么?如何缩小图像(根据文档总是减少2倍)

JPEG是全彩色的,因此转换为灰度最终没有帮助,GIF是8位索引或灰度,所以即使这样也值得一试。

答案 2 :(得分:0)

保持质量。压缩图像。使用ShortPixel。即使是10MB /图像。

答案 3 :(得分:0)

有三件事可以帮助减少图像尺寸: 在保持纵横比的同时缩小图像:

public static Bitmap decodeSampledBitmapFromResource(byte[] data,
                                                             int reqWidth, int reqHeight) {
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeByteArray(data, 0, data.length, options);
            options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
            options.inJustDecodeBounds = false;
            options.inPreferredConfig = Bitmap.Config.RGB565;
            return BitmapFactory.decodeByteArray(data, 0, data.length, options);
        }

删除Alpha通道,使用以下配置:

options.inPreferredConfig = Bitmap.Config.RGB565;

使用JPEG压缩压缩图像:

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);

100没有压缩和 0为100%压缩

GrayScaling不会减小尺寸。