bitmap 将图片压缩到指定的大小 JAVA

来源:互联网 发布:java定义包的关键字 编辑:程序博客网 时间:2024/04/28 20:39
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));                  }          }  

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 resizeBitMapImage1(String filePath, int targetWidth,            int targetHeight) {        Bitmap bitMapImage = null;        // First, get the dimensions of the image        Options options = new Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile(filePath, options);        double sampleSize = 0;        // Only scale if we need to        // (16384 buffer for img processing)        Boolean scaleByHeight = Math.abs(options.outHeight - targetHeight) >= Math                .abs(options.outWidth - targetWidth);            if (options.outHeight * options.outWidth * 2 >= 1638) {            // Load, scaling to smallest power of 2 that'll get it <= desired            // dimensions            sampleSize = scaleByHeight ? options.outHeight / targetHeight                    : options.outWidth / targetWidth;            sampleSize = (int) Math.pow(2d,                    Math.floor(Math.log(sampleSize) / Math.log(2d)));        }        // Do the actual decoding        options.inJustDecodeBounds = false;        options.inTempStorage = new byte[128];        while (true) {            try {                options.inSampleSize = (int) sampleSize;                bitMapImage = BitmapFactory.decodeFile(filePath, options);                  break;            } catch (Exception ex) {                try {                    sampleSize = sampleSize * 2;                } catch (Exception ex1) {                  }            }        }        return bitMapImage;    }

0 0
原创粉丝点击