现在的位置: 首页 > 综合 > 正文

bitmap 压缩 compress

2019年10月09日 ⁄ 综合 ⁄ 共 1616字 ⁄ 字号 评论关闭
 /**
     * Write a compressed version of the bitmap to the specified outputstream.
     * If this returns true, the bitmap can be reconstructed by passing a
     * corresponding inputstream to BitmapFactory.decodeStream(). Note: not
     * all Formats support all bitmap configs directly, so it is possible that
     * the returned bitmap from BitmapFactory could be in a different bitdepth,
     * and/or may have lost per-pixel alpha (e.g. JPEG only supports opaque
     * pixels).
     *
     * @param format   The format of the compressed image
     * @param quality  Hint to the compressor, 0-100. 0 meaning compress for
     *                 small size, 100 meaning compress for max quality. Some
     *                 formats, like PNG which is lossless, will ignore the
     *                 quality setting
     * @param stream   The outputstream to write the compressed data.
     * @return true if successfully compressed to the specified stream.
     */
    public boolean compress(CompressFormat format, int quality, OutputStream stream) {
        checkRecycled("Can't compress a recycled bitmap");
        // do explicit check before calling the native method
        if (stream == null) {
            throw new NullPointerException();
        }
        if (quality < 0 || quality > 100) {
            throw new IllegalArgumentException("quality must be 0..100");
        }
        return nativeCompress(mNativeBitmap, format.nativeInt, quality,
                              stream, new byte[WORKING_COMPRESS_STORAGE]);
    }

以上摘自官方API

int count = image.getWidth() * image.getHeight() / 1024;
Log.d("bitmap:compress", "压缩前:" + count);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
image.compress(Bitmap.CompressFormat.JPEG, 50, bout); //修改第二个参数 
count = image.getWidth() * image.getHeight() / 1024;
Log.d("bitmap:compress", "压缩后:" + count);
Log.d("bitmap:compress", "压缩后:" + bout.toByteArray().length / 1024);

运行以上代码--输出: 

压缩前 85 

压缩后 85 

压缩后 24  --

如果将第二个参数50改为10 则会

压缩前 85 

压缩后 85 

压缩后 13  --

————————————————————

可以发现bitmap基本上没有被压缩吧。  压缩后的数据被写到 bout里面去了

抱歉!评论已关闭.