最近稍微空闲了一点,然后开始整理一下之前项目用到的东西,方便以后项目再次使用。很多项目需要用到发布图片的功能吧,像社区朋友圈之类的,如果直接把图片不经过压缩上传,那体验肯定不好,第一个浪费流量、第二个等待的时间太长。所以上传前还是来压缩一下照片吧,这里压缩是对尺寸和质量进行了压缩,压缩后的照片在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异步批量压缩图片相关推荐

  1. 图片压缩指定大小,让您的图片高效而优美

    在现代社会中,图片是我们不可或缺的一部分,在各行业中都有着非常重要的作用.但是,大尺寸的图片不仅会占用过多的存储空间,还会导致网页或应用程序的加载速度变慢.因此,将图片压缩到指定大小是一个必要的步骤. ...

  2. 怎样在线压缩png图片大小?将这个压缩方法分享给大家

    在日常的办公和生活中,我们经常会使用到很多图片,比如:png图片,因为图片格式的属性比jpg格式图片存储空间大,不仅图片文件传输速度慢,而且在上传平台时就会因图片过大导致上传失败,给工作上带来不便.如 ...

  3. 如何修改图片大小200kb?怎样让图片不超过200k?

    很多网站对于上传的图片大小是有限制的,比如教师资格证报名时,照片不得大于200kb,如果图片大小超过了200k,是无法顺利上传的,怎么才能图片压缩到200k以内呢?下面给大家推荐啊一个缩小图片kb的方 ...

  4. linux批量修改压缩图片大小,linux shell批量压缩某个目录下图片大小

    linux shell批量压缩某个目录下图片大小 #!/bin/sh read -p "Input Path:" SPATH maxsize=$((1024*200)) FILEL ...

  5. android+怎么分享图片大小,Android微信分享图片大于32k进行压缩

    微信分享视频的时候,需要传一个图片数组,大小不能大于32k. 解决方案:使用Bitmap自带的compress方法解决了这个问题. 源码如下: package com.example.test; im ...

  6. android相册和拍照并裁剪图片大小,Android 拍照并对照片进行裁剪和压缩实例详解...

    Android 拍照并对照片进行裁剪和压缩实例详解 本文主要介绍 Android 调用摄像头拍照并对照片进行裁剪和压缩,文中给出了主要步骤和关键代码. 调用摄像头拍照,对拍摄照片进行裁剪,代码如下. ...

  7. Android中的缓存处理及异步加载图片类的封装

    一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端: 流量开销:对于客户端--服务器端应用,从远程获取图 ...

  8. android页面设置背景图片大小,android页面设置background为图片后,页面滑动掉帧问题...

    最近接手的一个android项目里面,有个viewpager+3个fragment的页面,就是很常见的可以左右滑动切换页面的那种布局.接手的时候告诉我,这个页面有卡顿现象,性能需要优化.一开始觉得是f ...

  9. android 自由缩放图片大小,android Matrix实现图片随意放大缩小或拖动

    本文实例为大家分享了android Matrix图片随意放大缩小和拖动的具体代码,供大家参考,具体内容如下 step1:新建一个项目DragAndZoom,并准备一张照片放在res/drawable- ...

最新文章

  1. 牛客算法周周练2 B Music Problem(DP,抽屉原理,二进制拆分)
  2. 加快Tensorflow和Keras图像数据集的训练速度
  3. sqlite性能优化
  4. Lnmp环境安装禅道项目管理软件
  5. python自动压图贴图到Excel小工具
  6. #论char数组结尾’\0’的必要性#
  7. vs 外部依赖项、附加依赖项以及如何添加依赖项目
  8. Centos 设置时区和时间以及增加中文输入法
  9. 2009年3月全国计算机等级考试二级Java笔试试题及答案
  10. Springboot项目中Pom.xml报错
  11. (转)亚马逊创始人贝佐斯:前进路上,善良远比聪明重要
  12. R语言manova函数稳健多元方差分析(Robust one-way MANOVA)、rrcov包中的wilks.test函数稳健单向MANOVA、vegan包的adonis函数非参数Manova等效
  13. 前端JSON格式化显示
  14. bzoj3123【SDOI2013】森林
  15. TI快充芯片-BQ25890
  16. linux中zlib源码包安装
  17. UG数控编程3种螺旋刀路,可用于各种2d和3d加工过程
  18. keybindings.json
  19. Flink实战(九十三):数据倾斜(二)keyby 窗口数据倾斜的优化
  20. GADRCRERCERRHRGDWQGKQRCLMECRRREQEED|2243219-65-8

热门文章

  1. PHP函数gmstrftime()将秒数转换成天时分秒
  2. python爬虫+词云生成小说简介
  3. 湖北省计算机学院排名,湖北省大学名次:华中师大没进前三,7所全国百强大学...
  4. 涅槃的火鸟-Pascal前世今生之二(风生水起-Pascal承接衣钵)
  5. Python多线程自动刷票脚本
  6. RMreport的使用技巧
  7. Oracle数据库双机热备方案
  8. 2019年 -- 只聊感情
  9. js三级联动地址选择
  10. Java语言程序设计教程(魏永红版)第8章课本源码