android 批量压缩图片大小,Android异步批量压缩图片
最近稍微空闲了一点,然后开始整理一下之前项目用到的东西,方便以后项目再次使用。很多项目需要用到发布图片的功能吧,像社区朋友圈之类的,如果直接把图片不经过压缩上传,那体验肯定不好,第一个浪费流量、第二个等待的时间太长。所以上传前还是来压缩一下照片吧,这里压缩是对尺寸和质量进行了压缩,压缩后的照片在100k左右。保证了清晰度同时体积也大大减少。
废话不多说,直接来看使用方法:
List list = new ArrayList<>();
list.add("mnt/sdcard/1.jpg");
list.add("mnt/sdcard/2.jpg");
list.add("mnt/sdcard/3.jpg");
new CompressPhotoUtils().CompressPhoto(MainActivity.this, list, new CompressCallBack() {
@Override
public void success(List list) {
//upload(list);执行上传的方法
}
});
是不是很简单,调用方法后,会使用异步任务来压缩图片,回调的list集合就是压缩完的照片路径集合,在这里面调用上传的方法就行了。
最后附上代码:
package com.example.lol;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
public class CompressPhotoUtils {
private List fileList = new ArrayList<>();
private ProgressDialog progressDialog;
public void CompressPhoto(Context context, List list, CompressCallBack callBack) {
CompressTask task = new CompressTask(context, list, callBack);
task.execute();
}
class CompressTask extends AsyncTask {
private Context context;
private List list;
private CompressCallBack callBack;
CompressTask(Context context, List list, CompressCallBack callBack) {
this.context = context;
this.list = list;
this.callBack = callBack;
}
/**
* 运行在UI线程中,在调用doInBackground()之前执行
*/
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(context, null, "处理中...");
}
/**
* 后台运行的方法,可以运行非UI线程,可以执行耗时的方法
*/
@Override
protected Integer doInBackground(Void... params) {
for (int i = 0; i < list.size(); i++) {
Bitmap bitmap = getBitmap(list.get(i));
String path = SaveBitmap(bitmap, i);
fileList.add(path);
}
return null;
}
/**
* 运行在ui线程中,在doInBackground()执行完毕后执行
*/
@Override
protected void onPostExecute(Integer integer) {
progressDialog.dismiss();
callBack.success(fileList);
}
/**
* 在publishProgress()被调用以后执行,publishProgress()用于更新进度
*/
@Override
protected void onProgressUpdate(Integer... values) {
}
}
/**
* 从sd卡获取压缩图片bitmap
*/
public static Bitmap getBitmap(String srcPath) {
BitmapFactory.Options newOpts = new BitmapFactory.Options();
newOpts.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
float hh = 1280f;
float ww = 720f;
// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
int be = 1;// be=1表示不缩放
if (w > h && w > ww) {// 如果宽度大的话根据宽度固定大小缩放
be = (int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {// 如果高度高的话根据宽度固定大小缩放
be = (int) (newOpts.outHeight / hh);
}
newOpts.inSampleSize = be;// 设置缩放比例
bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
return bitmap;
}
/**
* 保存bitmap到内存卡
*/
public static String SaveBitmap(Bitmap bmp, int num) {
File file = new File("mnt/sdcard/贝贝宠/");
String path = null;
if (!file.exists())
file.mkdirs();
try {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String picName = formatter.format(new Date());
path = file.getPath() + "/" + picName + "-" + num + ".jpg";
FileOutputStream fileOutputStream = new FileOutputStream(path);
bmp.compress(Bitmap.CompressFormat.JPEG, 90, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return path;
}
public interface CompressCallBack {
void success(List list);
}
}
android 批量压缩图片大小,Android异步批量压缩图片相关推荐
- 图片压缩指定大小,让您的图片高效而优美
在现代社会中,图片是我们不可或缺的一部分,在各行业中都有着非常重要的作用.但是,大尺寸的图片不仅会占用过多的存储空间,还会导致网页或应用程序的加载速度变慢.因此,将图片压缩到指定大小是一个必要的步骤. ...
- 怎样在线压缩png图片大小?将这个压缩方法分享给大家
在日常的办公和生活中,我们经常会使用到很多图片,比如:png图片,因为图片格式的属性比jpg格式图片存储空间大,不仅图片文件传输速度慢,而且在上传平台时就会因图片过大导致上传失败,给工作上带来不便.如 ...
- 如何修改图片大小200kb?怎样让图片不超过200k?
很多网站对于上传的图片大小是有限制的,比如教师资格证报名时,照片不得大于200kb,如果图片大小超过了200k,是无法顺利上传的,怎么才能图片压缩到200k以内呢?下面给大家推荐啊一个缩小图片kb的方 ...
- linux批量修改压缩图片大小,linux shell批量压缩某个目录下图片大小
linux shell批量压缩某个目录下图片大小 #!/bin/sh read -p "Input Path:" SPATH maxsize=$((1024*200)) FILEL ...
- android+怎么分享图片大小,Android微信分享图片大于32k进行压缩
微信分享视频的时候,需要传一个图片数组,大小不能大于32k. 解决方案:使用Bitmap自带的compress方法解决了这个问题. 源码如下: package com.example.test; im ...
- android相册和拍照并裁剪图片大小,Android 拍照并对照片进行裁剪和压缩实例详解...
Android 拍照并对照片进行裁剪和压缩实例详解 本文主要介绍 Android 调用摄像头拍照并对照片进行裁剪和压缩,文中给出了主要步骤和关键代码. 调用摄像头拍照,对拍摄照片进行裁剪,代码如下. ...
- Android中的缓存处理及异步加载图片类的封装
一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端: 流量开销:对于客户端--服务器端应用,从远程获取图 ...
- android页面设置背景图片大小,android页面设置background为图片后,页面滑动掉帧问题...
最近接手的一个android项目里面,有个viewpager+3个fragment的页面,就是很常见的可以左右滑动切换页面的那种布局.接手的时候告诉我,这个页面有卡顿现象,性能需要优化.一开始觉得是f ...
- android 自由缩放图片大小,android Matrix实现图片随意放大缩小或拖动
本文实例为大家分享了android Matrix图片随意放大缩小和拖动的具体代码,供大家参考,具体内容如下 step1:新建一个项目DragAndZoom,并准备一张照片放在res/drawable- ...
最新文章
- 牛客算法周周练2 B Music Problem(DP,抽屉原理,二进制拆分)
- 加快Tensorflow和Keras图像数据集的训练速度
- sqlite性能优化
- Lnmp环境安装禅道项目管理软件
- python自动压图贴图到Excel小工具
- #论char数组结尾’\0’的必要性#
- vs 外部依赖项、附加依赖项以及如何添加依赖项目
- Centos 设置时区和时间以及增加中文输入法
- 2009年3月全国计算机等级考试二级Java笔试试题及答案
- Springboot项目中Pom.xml报错
- (转)亚马逊创始人贝佐斯:前进路上,善良远比聪明重要
- R语言manova函数稳健多元方差分析(Robust one-way MANOVA)、rrcov包中的wilks.test函数稳健单向MANOVA、vegan包的adonis函数非参数Manova等效
- 前端JSON格式化显示
- bzoj3123【SDOI2013】森林
- TI快充芯片-BQ25890
- linux中zlib源码包安装
- UG数控编程3种螺旋刀路,可用于各种2d和3d加工过程
- keybindings.json
- Flink实战(九十三):数据倾斜(二)keyby 窗口数据倾斜的优化
- GADRCRERCERRHRGDWQGKQRCLMECRRREQEED|2243219-65-8