Android 图片压缩的几种方法
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 图片压缩的几种方法相关推荐
- java 图片压缩100k_Java 实现图片压缩的两种方法
问题背景. 典型的情景:Nemo社区中,用户上传的图片免不了要在某处给用户做展示. 如用户上传的头像,那么其他用户在浏览该用户信息的时候,就会需要回显头像信息了. 用户上传的原图可能由于清晰度较高而体 ...
- android图片压缩的三种方式
为了避免oom的出现,几乎每个应用都会对大图进行压缩,我现在手头做的产品就有很多地方用到,以前封装工具类的时候,都是在网上找东找西,然后拼拼凑凑,有效果就行了,一直用的迷迷糊糊,这几天工作比较闲,正好 ...
- android中bitmap压缩的几种方法详解
Android图片压缩(质量压缩和尺寸压缩) 在做项目中遇到一个头疼的问题,读取本地图片时,由于图片太大,奔溃,对于我这种456M内存的破手机哪里受得了几M的照片 我要总结的有这么几点: 1.尺寸压缩 ...
- android 图片叠加xml,Android实现图片叠加效果的两种方法
本文实例讲述了Android实现图片叠加效果的两种方法.,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // ...
- android 画布叠加,Android实现图片叠加效果的两种方法
本文实例讲述了Android实现图片叠加效果的两种方法.分享给大家供大家参考,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(Vi ...
- Android图片压缩(质量压缩和尺寸压缩)
在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...
- android 图片压缩总结1
在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...
- 最详细的Android图片压缩攻略
Mr.Louis的博客地址: https://blog.csdn.net/weixin_44005563 最近在研究图片压缩原理,看了大量资料,从上层尺寸压缩.质量压缩原理到下层的哈夫曼压缩,走成华大 ...
- android 图片压缩,bitmap压缩总结
1. 图片压缩相关概念 在android开发中,图片加载到内存中通常需要占用大量的内存,导致app性能过度消耗,严重的话可能会导致OOM异常,所以对图片进行优化就尤为重要. android图片压 ...
- Android 图片压缩各种方式
前言:由于公司项目当中需要用到压缩这块的相应技术,之前也做过的图片压缩都不是特别的理想, 所以这次花了很多心思,仔细研究和在网上找到了很多相对应的资料.为了就是 以后再做的时候直接拿来用就可以了! 第 ...
最新文章
- oracle中的decode的使用
- java多线程notify_Java多线程 wait notify
- python 安装 HTMLtestRunner(转)
- 权限操作-表结构分析与创建表
- es6 --- Thunk函数的作用
- Java+Selenium3.0----------启动谷歌浏览器及错误处理
- YOLOV5+Deepsort行人跟踪初探
- [转载] pythonjson构建二维数组_python二维键值数组生成转json的例子
- 回归分析什么时候取对数_线性回归模型,哪些变量取对数形式?
- 2021年全国省市区街道代码自动同步(包含解决方案)
- C语言学习(3)VScode配置C语言环境(简洁易懂版)
- Android App开发动画特效中遮罩动画的讲解及实战演示(附源码 简单易懂 可直接使用)
- C#隐藏任务管理器中进程 支持win10 win8.1 win7
- 腾讯企业邮箱开发(非官方开发文档方式
- C# 获取url 状态,获取重定向(HttpWebRequest)
- js splice,slice,split区别
- 淘宝聚划算怎么做?大神导航,一个神奇的网站,从此开启大神之路!
- 质量小议24 -- 帕累托最优
- 使用rcedit修改exe文件信息(图标、版本、版权等)
- 【毕业设计day05】精析代码