Android 图片压缩的几种方法
当图片太大不满足需求时,需要对图片进行裁剪压缩处理,常用的压缩处理接口主要有三种:质量压缩法,尺寸压缩法,缩略图压缩法和等比例压缩法,具体代码如下:

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ThumbnailUtils;
import android.util.Log;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;/*** 图片压缩的方法*/
public class BitmapUtils {/*** 图片压缩:质量压缩方法* @param beforBitmap 要压缩的图片* @return 压缩后的图片*/static private Bitmap compressImage(Bitmap beforeBitmap) {// 可以捕获内存缓冲区的数据,转换成字节数组。ByteArrayOutputStream bos = new ByteArrayOutputStream();if (beforeBitmap != null) {// 第一个参数:图片压缩的格式;第二个参数:压缩的比率;第三个参数:压缩的数据存放到bos中beforeBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);// 循环判断压缩后的图片大小是否满足要求,这里限制100kb,若不满足则继续压缩,每次递减10%压缩int options = 100;while (bos.toByteArray().length / 1024 > 100) {bos.reset();// 置为空beforeBitmap.compress(Bitmap.CompressFormat.JPEG, options, bos);options -= 10;}// 从bos中将数据读出来 转换成图片ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());Bitmap afterBitmap = BitmapFactory.decodeStream(bis);return afterBitmap;}return null;}/*** 图片压缩:获得缩略图* @param beforeBitmap 要压缩的图片* @param width 缩略图宽度* @param height 缩略图高度* @return 压缩后的图片*/static public Bitmap getThumbnail(Bitmap beforeBitmap, int width, int height) {return ThumbnailUtils.extractThumbnail(beforeBitmap, width, height);}/*** 图片压缩: 按尺寸压缩* @param beforeBitmap 要压缩的图片* @param newWidth 压缩后的宽度* @param newHeight 压缩后的高度* @return 压缩后的图片*/static public Bitmap compressBitmap1(Bitmap beforeBitmap, double newWidth, double newHeight) {// 图片原有的宽度和高度float beforeWidth = beforeBitmap.getWidth();float beforeHeight = beforeBitmap.getHeight();// 计算宽高缩放率float scaleWidth = 0;float scaleHeight = 0;if (beforeWidth > beforeHeight) {scaleWidth = ((float) newWidth) / beforeWidth;scaleHeight = ((float) newHeight) / beforeHeight;} else {scaleWidth = ((float) newWidth) / beforeHeight;scaleHeight = ((float) newHeight) / beforeWidth;}// 矩阵对象Matrix matrix = new Matrix();// 缩放图片动作 缩放比例matrix.postScale(scaleWidth, scaleHeight);// 创建一个新的Bitmap 从原始图像剪切图像Bitmap afterBitmap = Bitmap.createBitmap(beforeBitmap, 0, 0,(int) beforeWidth, (int) beforeHeight, matrix, true);return afterBitmap;}/*** 图片压缩: 规定尺寸等比例压缩,宽高不能超过限制要求* @param beforBitmap 要压缩的图片* @param maxWidth 最大宽度限制* @param maxHeight 最大高度限制* @return 压缩后的图片*/static public Bitmap compressBitmap(Bitmap beforBitmap, double maxWidth, double maxHeight) {// 图片原有的宽度和高度float beforeWidth = beforBitmap.getWidth();float beforeHeight = beforBitmap.getHeight();if (beforeWidth <= maxWidth && beforeHeight <= maxHeight) {return beforBitmap;}// 计算宽高缩放率,等比例缩放float scaleWidth =  ((float) maxWidth) / beforeWidth;float scaleHeight = ((float)maxHeight) / beforeHeight;float scale = scaleWidth;if (scaleWidth > scaleHeight) {scale = scaleHeight;}Log.d("BitmapUtils", "before[" + beforeWidth + ", " + beforeHeight + "] max[" + maxWidth+ ", " + maxHeight + "] scale:" + scale);// 矩阵对象Matrix matrix = new Matrix();// 缩放图片动作 缩放比例matrix.postScale(scale, scale);// 创建一个新的Bitmap 从原始图像剪切图像Bitmap afterBitmap = Bitmap.createBitmap(beforBitmap, 0, 0,(int) beforeWidth, (int) beforeHeight, matrix, true);return afterBitmap;}
}

Android 图片压缩的几种方法相关推荐

  1. java 图片压缩100k_Java 实现图片压缩的两种方法

    问题背景. 典型的情景:Nemo社区中,用户上传的图片免不了要在某处给用户做展示. 如用户上传的头像,那么其他用户在浏览该用户信息的时候,就会需要回显头像信息了. 用户上传的原图可能由于清晰度较高而体 ...

  2. android图片压缩的三种方式

    为了避免oom的出现,几乎每个应用都会对大图进行压缩,我现在手头做的产品就有很多地方用到,以前封装工具类的时候,都是在网上找东找西,然后拼拼凑凑,有效果就行了,一直用的迷迷糊糊,这几天工作比较闲,正好 ...

  3. android中bitmap压缩的几种方法详解

    Android图片压缩(质量压缩和尺寸压缩) 在做项目中遇到一个头疼的问题,读取本地图片时,由于图片太大,奔溃,对于我这种456M内存的破手机哪里受得了几M的照片 我要总结的有这么几点: 1.尺寸压缩 ...

  4. android 图片叠加xml,Android实现图片叠加效果的两种方法

    本文实例讲述了Android实现图片叠加效果的两种方法.,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // ...

  5. android 画布叠加,Android实现图片叠加效果的两种方法

    本文实例讲述了Android实现图片叠加效果的两种方法.分享给大家供大家参考,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(Vi ...

  6. Android图片压缩(质量压缩和尺寸压缩)

    在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...

  7. android 图片压缩总结1

    在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...

  8. 最详细的Android图片压缩攻略

    Mr.Louis的博客地址: https://blog.csdn.net/weixin_44005563 最近在研究图片压缩原理,看了大量资料,从上层尺寸压缩.质量压缩原理到下层的哈夫曼压缩,走成华大 ...

  9. android 图片压缩,bitmap压缩总结

    1.    图片压缩相关概念 在android开发中,图片加载到内存中通常需要占用大量的内存,导致app性能过度消耗,严重的话可能会导致OOM异常,所以对图片进行优化就尤为重要. android图片压 ...

  10. Android 图片压缩各种方式

    前言:由于公司项目当中需要用到压缩这块的相应技术,之前也做过的图片压缩都不是特别的理想, 所以这次花了很多心思,仔细研究和在网上找到了很多相对应的资料.为了就是 以后再做的时候直接拿来用就可以了! 第 ...

最新文章

  1. oracle中的decode的使用
  2. java多线程notify_Java多线程 wait notify
  3. python 安装 HTMLtestRunner(转)
  4. 权限操作-表结构分析与创建表
  5. es6 --- Thunk函数的作用
  6. Java+Selenium3.0----------启动谷歌浏览器及错误处理
  7. YOLOV5+Deepsort行人跟踪初探
  8. [转载] pythonjson构建二维数组_python二维键值数组生成转json的例子
  9. 回归分析什么时候取对数_线性回归模型,哪些变量取对数形式?
  10. 2021年全国省市区街道代码自动同步(包含解决方案)
  11. C语言学习(3)VScode配置C语言环境(简洁易懂版)
  12. Android App开发动画特效中遮罩动画的讲解及实战演示(附源码 简单易懂 可直接使用)
  13. C#隐藏任务管理器中进程 支持win10 win8.1 win7
  14. 腾讯企业邮箱开发(非官方开发文档方式
  15. C# 获取url 状态,获取重定向(HttpWebRequest)
  16. js splice,slice,split区别
  17. 淘宝聚划算怎么做?大神导航,一个神奇的网站,从此开启大神之路!
  18. 质量小议24 -- 帕累托最优
  19. 使用rcedit修改exe文件信息(图标、版本、版权等)
  20. 【毕业设计day05】精析代码

热门文章

  1. 可见光通信系统的调制效率
  2. js的数据类型,深拷贝和浅拷贝的原理,loda实现一个深拷贝
  3. 制作血条/蓝条/蓄力条等进度条(Progress Bar)
  4. 智力问答选择题_智力问答题题库
  5. 安卓手机 wifi 探针
  6. win10小娜助手无法搜索本地应用怎么办
  7. 机器视觉系统——光源及打光
  8. 天心阁吉他神秘人专访
  9. 1.《如何阅读一本书》读书若谈恋爱:如何阅读一本书?
  10. html中footer怎么写,HTML DOM Footer用法及代码示例