项目中常常遇到文件压缩问题,上传文件大小限制

今天简单的分享一点干货,文件压缩,图片压缩,压缩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);

该案例参考了:

android -------- 压缩图片文件工具类的更多相关文章

  1. android ImageUtils 图片处理工具类

    /** * 加入文字到图片.相似水印文字. * @param gContext * @param gResId * @param gText * @return */ public static Bi ...

  2. Android FileUtil(android文件工具类)

    android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...

  3. Android开源项目大全 - 工具类

    主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少Vie ...

  4. Android经常使用的工具类

    主要介绍总结的Android开发中经常使用的工具类,大部分相同适用于Java. 眼下包含HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils. Pr ...

  5. 图片处理工具类 - ImageUtils.java

    纯JAVA实现的图片处理工具类,提供图片的裁剪.压缩.获取尺寸.制作圆角等方法. 源码如下:(点击下载 -ImageUtils.java .FolderUtils.java .commons-io-2 ...

  6. Java操作图片的工具类

    操作图片的工具类: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.a ...

  7. 自动扫描FTP文件工具类 ScanFtp.java

    package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  8. java图片处理工具类

    直接上代码: package com.zxd.tool; /** * Created by zhang on 14-3-1. * 图片的常用操作类 */ import java.awt.AlphaCo ...

  9. Android开发调试日志工具类[支持保存到SD卡]

    直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...

随机推荐

  1. 转 docker创建私有仓库和k8s中使用私有镜像

    docker私有仓库建立 环境说明我们选取192.168.5.2做私有仓库地址yum install docker -y1.启动docker仓库端口服务 docker run -d -p 5000:5 ...

  2. Linux下/usr/bin与/usr/local/bin/区别总结

    Linux下/usr/bin与/usr/local/bin/区别总结 2017年10月13日 12:30:17 2puT 阅读数:15930    版权声明:本文为博主原创文章! github地址:h ...

  3. SQL基础语法提纲

    一.SQL需知5点 1.SQL是Structured Query Language的缩写,是用来访问关系型数据库的,非过程化的,高级编程语言. 2.SQL具有语法高度综合统一,高度的非过程化,对集合进 ...

  4. HTTP状态码简单总结

    状态码数字的第一位表明了响应类别,如以下5种:     类别 原因短语 1XX Informational(信息性状态码) 接受的请求正在处理 2XX Success(成功状态码) 请求正常处理完毕 ...

  5. docker容器的操作

    容器操作 1.查看本地容器 docker ps -a # 查看所有容器 docker ps # 查看所有正在运行的容器 2.容器的创建与启动 方法一:两步完成(强烈推荐方法)(1)创建 docker ...

  6. #WEB安全基础 : HTTP协议 | 0x8 HTTP的Cookie技术

    说道Cookie,你喜欢吃饼干吗? 这里的Cookie不是饼干=_= HTTP不对请求和响应的通信状态进行保存,所以被称为无状态协议,为了保持状态和协议功能引入了Cookie技术 Cookie技术在请 ...

  7. POJ 2154 color (polya + 欧拉优化)

    Beads of N colors are connected together into a circular necklace of N beads (N<=1000000000). You ...

  8. Linux安装 centos 7 最小化 安装

    我用的是vmware 15 ,我将用图片的形式带领大家安装,没有说到的地方为默认选项    最好把文件放到一个单独的文件夹中    简单密码点击两次DONE 即可,虚拟机密码不必那么复杂,工作环境请设 ...

  9. [openjudge-动态规划]滑雪

    题目描述 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区 ...

  10. shell printf命令:怎样格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...