android -------- 压缩图片文件工具类
项目中常常遇到文件压缩问题,上传文件大小限制
今天简单的分享一点干货,文件压缩,图片压缩,压缩Bitmap
主要通过尺寸压缩和质量压缩,以达到清晰度最优
效果图

源码地址: https://github.com/DickyQie/android-util
工具类代码
public class CompressHelper {
private static volatile CompressHelper INSTANCE;
private Context context;
/**
* 最大宽度,默认为720
*/
private float maxWidth = 720.0f;
/**
* 最大高度,默认为960
*/
private float maxHeight = 960.0f;
/**
* 默认压缩后的方式为JPEG
*/
private Bitmap.CompressFormat compressFormat = Bitmap.CompressFormat.JPEG;
/**
* 默认的图片处理方式是ARGB_8888
*/
private Bitmap.Config bitmapConfig = Bitmap.Config.ARGB_8888;
/**
* 默认压缩质量为80
*/
private int quality = 80;
/**
* 存储路径
*/
private String destinationDirectoryPath;
/**
* 文件名前缀
*/
private String fileNamePrefix;
/**
* 文件名
*/
private String fileName;
public static CompressHelper getDefault(Context context) {
if (INSTANCE == null) {
synchronized (CompressHelper.class) {
if (INSTANCE == null) {
INSTANCE = new CompressHelper(context);
}
}
}
return INSTANCE;
}
private CompressHelper(Context context) {
this.context = context;
destinationDirectoryPath = context.getCacheDir().getPath() + File.pathSeparator + FileUtil.FILES_PATH;
}
/**
* 压缩成文件
* @param file 原始文件
* @return 压缩后的文件
*/
public File compressToFile(File file) {
return BitmapUtil.compressImage(context, Uri.fromFile(file), maxWidth, maxHeight,
compressFormat, bitmapConfig, quality, destinationDirectoryPath,
fileNamePrefix, fileName);
}
/**
* 压缩为Bitmap
* @param file 原始文件
* @return 压缩后的Bitmap
*/
public Bitmap compressToBitmap(File file) {
return BitmapUtil.getScaledBitmap(context, Uri.fromFile(file), maxWidth, maxHeight, bitmapConfig);
}
/**
* 采用建造者模式,设置Builder
*/
public static class Builder {
private CompressHelper mCompressHelper;
public Builder(Context context) {
mCompressHelper = new CompressHelper(context);
}
/**
* 设置图片最大宽度
* @param maxWidth 最大宽度
*/
public Builder setMaxWidth(float maxWidth) {
mCompressHelper.maxWidth = maxWidth;
return this;
}
/**
* 设置图片最大高度
* @param maxHeight 最大高度
*/
public Builder setMaxHeight(float maxHeight) {
mCompressHelper.maxHeight = maxHeight;
return this;
}
/**
* 设置压缩的后缀格式
*/
public Builder setCompressFormat(Bitmap.CompressFormat compressFormat) {
mCompressHelper.compressFormat = compressFormat;
return this;
}
/**
* 设置Bitmap的参数
*/
public Builder setBitmapConfig(Bitmap.Config bitmapConfig) {
mCompressHelper.bitmapConfig = bitmapConfig;
return this;
}
/**
* 设置压缩质量,建议80
* @param quality 压缩质量,[0,100]
*/
public Builder setQuality(int quality) {
mCompressHelper.quality = quality;
return this;
}
/**
* 设置目的存储路径
* @param destinationDirectoryPath 目的路径
*/
public Builder setDestinationDirectoryPath(String destinationDirectoryPath) {
mCompressHelper.destinationDirectoryPath = destinationDirectoryPath;
return this;
}
/**
* 设置文件前缀
* @param prefix 前缀
*/
public Builder setFileNamePrefix(String prefix) {
mCompressHelper.fileNamePrefix = prefix;
return this;
}
/**
* 设置文件名称
* @param fileName 文件名
*/
public Builder setFileName(String fileName) {
mCompressHelper.fileName = fileName;
return this;
}
public CompressHelper build() {
return mCompressHelper;
}
}
}
使用
File oldFile = CompressHelper.getDefault(getApplicationContext()).compressToFile(file);
自定义属性使用
File newFile = new CompressHelper.Builder(this)
.setMaxWidth(720) // 默认最大宽度为720
.setMaxHeight(960) // 默认最大高度为960
.setQuality(80) // 默认压缩质量为80
.setFileName(yourFileName) // 文件名称
.setCompressFormat(CompressFormat.JPEG) // 设置默认压缩为jpg格式
.setDestinationDirectoryPath(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).getAbsolutePath())//路径
.build()
.compressToFile(oldFile);
该案例参考了:
- https://github.com/zetbaitsu/Compressor
- https://github.com/Curzibn/Luban
- https://github.com/nanchen2251/CompressHelper
android -------- 压缩图片文件工具类的更多相关文章
- android ImageUtils 图片处理工具类
/** * 加入文字到图片.相似水印文字. * @param gContext * @param gResId * @param gText * @return */ public static Bi ...
- Android FileUtil(android文件工具类)
android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...
- Android开源项目大全 - 工具类
主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少Vie ...
- Android经常使用的工具类
主要介绍总结的Android开发中经常使用的工具类,大部分相同适用于Java. 眼下包含HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils. Pr ...
- 图片处理工具类 - ImageUtils.java
纯JAVA实现的图片处理工具类,提供图片的裁剪.压缩.获取尺寸.制作圆角等方法. 源码如下:(点击下载 -ImageUtils.java .FolderUtils.java .commons-io-2 ...
- Java操作图片的工具类
操作图片的工具类: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.a ...
- 自动扫描FTP文件工具类 ScanFtp.java
package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
- java图片处理工具类
直接上代码: package com.zxd.tool; /** * Created by zhang on 14-3-1. * 图片的常用操作类 */ import java.awt.AlphaCo ...
- Android开发调试日志工具类[支持保存到SD卡]
直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...
随机推荐
- 洛谷P2569 股票交易 [SCOI2010] dp
正解:dp+单调队列优化 解题报告: 先放个传送门鸭qwq umm首先dp转移挺好想的?就买和不买 f[i][j]表示第i天手上有j的股份的最多钱,转移也很好想?就枚举第1天到第i-w-1天枚举买k股 ...
- Bootstrap modal模态框关闭时,combobox input下拉框仍然保留在页面上
问题描述: 当点击模态框的关闭按钮时,下拉框中的内容没有消失,而是移动到了页面左上角 分析:这个问题的定位在于是用的哪种模态框,bootstrap和easyui都可以实现模态框,但是两个方法实现的模态 ...
- spring拦截器-过滤器的区别
1. 理解 拦截器 :是在面向切面编程的时候,在你的 service 或者一个方法前调用一个方法,或者在方法后调用一个方法:比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业 ...
- .net core 获取不到session 和cookies的值
在启动类的configure services()方法中,设置选项.checkconsent必需=context=false;如下: services.Configure<CookiePolic ...
- OCP-第三节课.md
一. dataguard stream 字节流技术: 二. 突然断电:触发实例恢复过程: 三. 宕机:赔钱 四. Redis.MQ(消息中间件.队列管理器.缓存)(内存数据库) 五. IBM MQ ...
- [js]js栈内存的全局/私有作用域,代码预解释
js代码如何执行的 浏览器提供执行环境: 全局作用域(提供js执行环境, 栈内存) --> 执行js需要预解释 - 带var : 提前声明 - 带function关键字的: 提前声明+定义 js ...
- 【JVM】-NO.110.JVM.1 -【JDK11 HashMap详解】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- pandas处理时间序列(2):DatetimeIndex、索引和选择、含有重复索引的时间序列、日期范围与频率和移位、时间区间和区间算术
一.时间序列基础 1. 时间戳索引DatetimeIndex 生成20个DatetimeIndex from datetime import datetime dates = pd.date_rang ...
- node(03)--利用 HTTP 模块 URl 模块 PATH 模块 FS 模块创建一个 WEB 服务器
Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等 Web 客户端提供文档,也可以放置网站文件,让全世界浏览:可以放置数据文件,让全世界下载.目前最主流的三个 We ...
- 使用fastdfs搭建文件服务器
一:安装tracker 1. 拷贝安装目录下各个.gz文件到/usr/local/src下,解压各个install lib,例如tar zxvf xxx.tar.gz 2. 先安装libfastcom ...