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 ...
随机推荐
- spark-sql中的DataFrame文件格式转储示例
SparkConf sparkConf = new SparkConf() // .setMaster("local") .setAppName("DataFrameTe ...
- 唯美MACD-完全版
前言: 自己很喜欢MACD这个指标,因为很欠缺所以就搜集的多一点,有人问,学习缠为什么还这么搜集些Macd的资料呢?因为在分析走势(或盘整背驰.或趋势背驰)的时候我的习惯使用Macd做辅助判断,所以M ...
- Redis入门到高可用(十七)—— 持久化开发运维常见问题
1.fork操作 2.子进程开销和优化 3.AOF阻塞
- BMC ipmitool 对linux服务器进行IPMI管理
IPMI是智能型平台管理接口(Intelligent Platform Management Interface)的缩写,是管理基于 Intel结构的企业系统中所使用的外围设备采用的一种工业标准,该标 ...
- Spring中bean标签的属性和值:
Spring中bean标签的属性和值: <bean name="user" class="com.pojo.User" init-method=" ...
- 第七篇——Struts2的接收参数
Struts2的接收参数 1.使用Action的属性接收参数 2.使用Domain Model接收参数 3.使用ModelDriven接收参数 项目实例 1.项目结构 2.pom.xml <pr ...
- 转——git常见使用命令及git原理
0.常用命令1 1.git中brunch的使用和理解(一定理解brunch的指针理解和分叉) 分支创建 Git 是怎么创建新分支的呢? 很简单,它只是为你创建了一个可以移动的新的指针. 比如,创建一个 ...
- JAVA JDK 环境变量配置--简单图解
Linux下的Jmeter运行测试 本文主要介绍Jmeter脚本如何在Linux通过no GUI的方式运行.总共分三部分: 1.Linux下JDK的安装及环境变量的配置 2.Linux下Jmeter的 ...
- linux系统(rpm与deb环境),JAVA JDK的配置
步骤一:(配置 JAVA JDK DEB系列linux系统) 1,下载JAVA JDK 1.1.官网下载java JDK (最好为1.7及以上版本) 下载地址http://www.oracle.co ...
- JavaScript 示例
JavaScript 示例 <html lang="en"> <head> <meta charset="UTF-8"> & ...