第一:我们先看下质量压缩方法:

[java] view plain copy
  1. privateBitmapcompressImage(Bitmapimage){
  2. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  3. image.compress(Bitmap.CompressFormat.JPEG,100,baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
  4. intoptions=100;
  5. while(baos.toByteArray().length/1024>100){//循环判断如果压缩后图片是否大于100kb,大于继续压缩
  6. baos.reset();//重置baos即清空baos
  7. image.compress(Bitmap.CompressFormat.JPEG,options,baos);//这里压缩options%,把压缩后的数据存放到baos中
  8. options-=10;//每次都减少10
  9. }
  10. ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
  11. Bitmapbitmap=BitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream数据生成图片
  12. returnbitmap;
  13. }

第二:图片按比例大小压缩方法(根据路径获取图片并压缩):

[java] view plain copy
  1. privateBitmapgetimage(StringsrcPath){
  2. BitmapFactory.OptionsnewOpts=newBitmapFactory.Options();
  3. //开始读入图片,此时把options.inJustDecodeBounds设回true了
  4. newOpts.inJustDecodeBounds=true;
  5. Bitmapbitmap=BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空
  6. newOpts.inJustDecodeBounds=false;
  7. intw=newOpts.outWidth;
  8. inth=newOpts.outHeight;
  9. //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
  10. floathh=800f;//这里设置高度为800f
  11. floatww=480f;//这里设置宽度为480f
  12. //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
  13. intbe=1;//be=1表示不缩放
  14. if(w>h&&w>ww){//如果宽度大的话根据宽度固定大小缩放
  15. be=(int)(newOpts.outWidth/ww);
  16. }elseif(w<h&&h>hh){//如果高度高的话根据宽度固定大小缩放
  17. be=(int)(newOpts.outHeight/hh);
  18. }
  19. if(be<=0)
  20. be=1;
  21. newOpts.inSampleSize=be;//设置缩放比例
  22. //重新读入图片,注意此时已经把options.inJustDecodeBounds设回false了
  23. bitmap=BitmapFactory.decodeFile(srcPath,newOpts);
  24. returncompressImage(bitmap);//压缩好比例大小后再进行质量压缩
  25. }

第三:图片按比例大小压缩方法(根据Bitmap图片压缩):

[java] view plain copy
  1. privateBitmapcomp(Bitmapimage){
  2. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  3. image.compress(Bitmap.CompressFormat.JPEG,100,baos);
  4. if(baos.toByteArray().length/1024>1024){//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
  5. baos.reset();//重置baos即清空baos
  6. image.compress(Bitmap.CompressFormat.JPEG,50,baos);//这里压缩50%,把压缩后的数据存放到baos中
  7. }
  8. ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());
  9. BitmapFactory.OptionsnewOpts=newBitmapFactory.Options();
  10. //开始读入图片,此时把options.inJustDecodeBounds设回true了
  11. newOpts.inJustDecodeBounds=true;
  12. Bitmapbitmap=BitmapFactory.decodeStream(isBm,null,newOpts);
  13. newOpts.inJustDecodeBounds=false;
  14. intw=newOpts.outWidth;
  15. inth=newOpts.outHeight;
  16. //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
  17. floathh=800f;//这里设置高度为800f
  18. floatww=480f;//这里设置宽度为480f
  19. //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
  20. intbe=1;//be=1表示不缩放
  21. if(w>h&&w>ww){//如果宽度大的话根据宽度固定大小缩放
  22. be=(int)(newOpts.outWidth/ww);
  23. }elseif(w<h&&h>hh){//如果高度高的话根据宽度固定大小缩放
  24. be=(int)(newOpts.outHeight/hh);
  25. }
  26. if(be<=0)
  27. be=1;
  28. newOpts.inSampleSize=be;//设置缩放比例
  29. //重新读入图片,注意此时已经把options.inJustDecodeBounds设回false了
  30. isBm=newByteArrayInputStream(baos.toByteArray());
  31. bitmap=BitmapFactory.decodeStream(isBm,null,newOpts);
  32. returncompressImage(bitmap);//压缩好比例大小后再进行质量压缩
  33. }

更多相关文章

  1. android帧动画(图片切换)——语音播放小喇叭
  2. Android前端开发15:显示网络图片
  3. Android Retrofit 图片上传的最简单和明白的实现方式
  4. Android设置桌面背景图片的方法
  5. android 获取屏幕的宽度和高度
  6. Android从服务器获取图片的实例方法

随机推荐

  1. Android(安卓)Studio JNI 开发简单案例
  2. android轮询最佳实践service+AlarmManage
  3. Android桌面管理
  4. Android(安卓)弹无虚发之第五弹:来点儿不
  5. android绚丽的ListView表格效果的实现
  6. Android基础知识(2)—事件处理
  7. AppCompatActivity实现全屏
  8. view的绘制机制(一)
  9. App自适应draw9patch不失真背景
  10. android 自定义progressDialog实现