• [Android算法] bitmap 将图片压缩到指定的大小


    Bitmap压缩到指定大小:

    private void imageZoom() {
    //图片允许最大空间 单位:KB
    double maxSize =400.00;
    //将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitMap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] b = baos.toByteArray();
    //将字节换成KB
    double mid = b.length/1024;
    //判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩
    if (mid > maxSize) {
    //获取bitmap大小 是允许最大大小的多少倍
    double i = mid / maxSize;
    //开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍 (1.保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小)
    bitMap = zoomImage(bitMap, bitMap.getWidth() / Math.sqrt(i),
    bitMap.getHeight() / Math.sqrt(i));
    }
    }



    public static Bitmap zoomImage(Bitmap bgimage, double newWidth,
    double newHeight) {
    // 获取这个图片的宽和高
    float width = bgimage.getWidth();
    float height = bgimage.getHeight();
    // 创建操作图片用的matrix对象
    Matrix matrix = new Matrix();
    // 计算宽高缩放率
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;
    // 缩放图片动作
    matrix.postScale(scaleWidth, scaleHeight);
    Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
    (int) height, matrix, true);
    return bitmap;
    }

    压缩后的图片比预期要大10% 原因可能是bitmap图的宽高不一致,导致压缩误差!

  • 相关阅读:
    [APIO2018]Circle selection
    [CF1025D]Recovering BST
    [CF1023D]Array Restoration
    [POI2006]PRO-Professor Szu
    [CF888G]Xor-MST
    可持久化并查集小结
    [国家队集训]最短路
    [POI2012]FES-Festival
    [SDOI2010]所驼门王的宝藏
    洛谷 P1025 & [NOIP2001提高组] 数的划分(搜索剪枝)
  • 原文地址:https://www.cnblogs.com/dongweiq/p/4204236.html
Copyright © 2020-2023  润新知