关于图片压缩

【Android图片压缩(质量压缩和尺寸压缩)&Bitmap转成字符串上传】
http://blog.csdn.net/jdsjlzx/article/details/44228935

  1. 图片按比例大小压缩方法
 public static Bitmap compressScale(Bitmap image, int value) {   ByteArrayOutputStream baos = new ByteArrayOutputStream();   image.compress(Bitmap.CompressFormat.JPEG, 100, baos);  //判断如果图片大于xxM,进行压缩避免在生成图片 (BitmapFactory.decodeStream)时溢出  if (baos.toByteArray().length / 1024 > 100)   {        baos.reset();// 重置baos即清空baos        // 这里压缩50%,把压缩后的数据存放到baos中        image.compress(Bitmap.CompressFormat.JPEG, 80, baos);    }   ByteArrayInputStream isBm = new     ByteArrayInputStream(baos.toByteArray());        BitmapFactory.Options newOpts = new BitmapFactory.Options();        // 开始读入图片,此时把options.inJustDecodeBounds 设回true了        newOpts.inJustDecodeBounds = true;        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);        newOpts.inJustDecodeBounds = false;        int w = newOpts.outWidth;        int h = newOpts.outHeight;        Log.i("123", w + "---------------" + h);        // 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为        // float hh = 800f;// 这里设置高度为800f        // float ww = 480f;// 这里设置宽度为480f        float hh = 512f;        float ww = 512f;        // 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可        int be = 1;// be=1表示不缩放        if (w > h && w > ww) {// 如果宽度大的话根据宽度固定大小缩放            be = (int) (newOpts.outWidth / ww);        } else if (w < h && h > hh) { // 如果高度高的话根据高度固定大小缩放            be = (int) (newOpts.outHeight / hh);        }        if (be <= 0)            be = 1;        newOpts.inSampleSize = be; // 设置缩放比例        // newOpts.inPreferredConfig = Config.RGB_565;//降低图片从ARGB888到RGB565        // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了        isBm = new ByteArrayInputStream(baos.toByteArray());        bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);        return compressImage(bitmap,value);// 压缩好比例大小后再进行质量压缩       }

2、质量压缩方法

  ByteArrayOutputStream baos = new ByteArrayOutputStream();  // 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中  image.compress(Bitmap.CompressFormat.JPEG, 100, baos);   int options = 90;  Log.e("123", "compressImage: " + baos.toByteArray().length / 1024);  // 循环判断如果压缩后图片是否大于xxkb,大于继续压缩  while (baos.toByteArray().length / 1024 > value) {    Log.e("123", "compressImage: zzz");  baos.reset(); // 重置baos即清空baos  //这里压缩options%,把压缩后的数据存放到baos中  image.compress(Bitmap.CompressFormat.JPEG, options, baos);   options -= 10;// 每次都减少10  Log.e("123", "compressImage: " + baos.toByteArray().length /    1024);  } //把压缩后的数据baos存放到ByteArrayInputStream中 ByteArrayInputStream isBm = new    ByteArrayInputStream(baos.toByteArray());  //把ByteArrayInputStream数据生成图片 Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null); //保存压缩后的图片 File dir = new File(path); if (!dir.exists())  {  //文件不存在,则创建文件  dir.mkdirs(); } File file = new File(path, "pm.png"); FileOutputStream fOut = null; try {      FileOutputStream out = new FileOutputStream(file);      out.write(baos.toByteArray());      out.flush();      out.close();  } catch (IOException e)   {    e.printStackTrace();  }  return bitmap;

更多相关文章

  1. mono for android 获取手机照片或拍照并裁剪保存
  2. android button 上添加图片
  3. Android(安卓)9Patch图片
  4. Android剪切图片
  5. android xml中设置自适应图片
  6. Android(安卓)Gallery的使用
  7. Android(安卓)之 ImageView(图片组件)
  8. android多点触摸缩放图片
  9. android imageVIew拖动 && 图片缩放

随机推荐

  1. MySQL mysqladmin客户端的使用简介
  2. MySQL MGR搭建过程中常遇见的问题及解决
  3. MySQL 权限控制细节分析
  4. MySQL 权限控制详解
  5. MySQL 利用frm文件和ibd文件恢复表数据
  6. MySQL使用Xtrabackup备份流程详解
  7. MySQL GTID全面总结
  8. MySQL大库搭建主从的一种思路分享
  9. 详解MySQL8.0原子DDL语法
  10. 导致MySQL做全表扫描的几种情况