在开发Android应用时,会经常上传图片到服务器,会经常出现上传图片失败和时间过长的问题

为了解决这个问题,决定把照片进行压缩后上保存后本地缓存文件夹后再上传

使用方法:

//压缩后得到新的图片路径

BitmapUtils.compressImageUpload  

// 上传成功后删除缓存文件

 BitmapUtils.deleteCacheFile()
public class BitmapUtils {/*** 质量压缩方法* * @param image* @return*/private static Bitmap compressImage(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG, 100, baos);int options = 100;while (baos.toByteArray().length / 1024 > 100) { baos.reset();image.compress(Bitmap.CompressFormat.JPEG, options, baos);options -= 10;}ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);return bitmap;}/*** 图片按比例大小压缩方法(根据路径获取图片并压缩)* * @param srcPath* @return*/private static Bitmap getImage(String srcPath) {BitmapFactory.Options newOpts = new BitmapFactory.Options();newOpts.inJustDecodeBounds = true;Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);// 此时返回bm为空newOpts.inJustDecodeBounds = false;int w = newOpts.outWidth;int h = newOpts.outHeight;// 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为float hh = 800f;// 这里设置高度为800ffloat ww = 480f;// 这里设置宽度为480f// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可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);}if (be <= 0)be = 1;newOpts.inSampleSize = be;// 设置缩放比例// 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了bitmap = BitmapFactory.decodeFile(srcPath, newOpts);return compressImage(bitmap);// 压缩好比例大小后再进行质量压缩}/*** 将压缩的bitmap保存到SDCard卡临时文件夹,用于上传* * @param filename* @param bit* @return*/private static String saveMyBitmap(String filename, Bitmap bit) {String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/laopai/";String filePath = baseDir + filename;File dir = new File(baseDir);if (!dir.exists()) {dir.mkdir();}File f = new File(filePath);try {f.createNewFile();FileOutputStream fOut = null;fOut = new FileOutputStream(f);bit.compress(Bitmap.CompressFormat.PNG, 100, fOut);fOut.flush();fOut.close();} catch (IOException e1) {e1.printStackTrace();}return filePath;}/*** 压缩上传路径* @param path* @return*/public static String compressImageUpload(String path) {String filename = path.substring(path.lastIndexOf("/") + 1);Bitmap image = getImage(path);return saveMyBitmap(filename, image);}/*** 清除缓存文件*/public static void deleteCacheFile(){File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/laopai/");RecursionDeleteFile(file);}/*** 递归删除*/private static void RecursionDeleteFile(File file){if(file.isFile()){file.delete();return;}if(file.isDirectory()){File[] childFile = file.listFiles();if(childFile == null || childFile.length == 0){file.delete();return;}for(File f : childFile){RecursionDeleteFile(f);}file.delete();}}
}

android 上传图片过大处理相关推荐

  1. android 大图片处理方法,android 上传图片过大处理

    在开发Android应用时,会经常上传图片到服务器,会经常出现上传图片失败和时间过长的问题 为了解决这个问题,决定把照片进行压缩后上保存后本地缓存文件夹后再上传 使用方法: //压缩后得到新的图片路径 ...

  2. android上传图片过大处理

    在开发Android应用时,会经常上传图片到服务器,会经常出现上传图片失败和时间过长的问题 为了解决这个问题,决定把照片进行压缩后上保存后本地缓存文件夹后再上传 使用方法: //压缩后得到新的图片路径 ...

  3. php android 图片上传,android上传图片到PHP的过程详解

    这篇文章主要介绍了android上传图片到PHP的过程详解,需要的朋友可以参考下 今天在做上传头像的时候,总是提交连接超时错误,报错信息如下:XXXXXXSokcetTimeOutXXXXXXXX 然 ...

  4. 手机端如何把图片传到php后台,android上传图片到PHP后台全过程

    DB2离线和在线全备.增量备份及恢复的操作步骤 1.离线全备份 1).首先确保没有用户使用DB2: $db2 list applications for db sample 2).停掉数据库并重新启动 ...

  5. ANDROID内存优化(大汇总——中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  6. 中国移动开发者社区专访:学习Android的两大法宝

    本文为原创,如需转载,请注明作者和出处,谢谢! 近日,接受了中国移动开发者社区的专访,谈了关于Android的一系列问题 http://dev.10086.cn/upload/developers_m ...

  7. Android加载大图片OOM异常解决

    Android加载大图片OOM异常解决 参考文章: (1)Android加载大图片OOM异常解决 (2)https://www.cnblogs.com/jevan/archive/2012/07/05 ...

  8. Android手机内存图片读取,有效解决Android加载大图片内存溢出的问题

    今天在交流群里,有人问我他经常遇到加载图片时内存溢出的问题,遇到的情况还是在自己的测试机或者手机里没有问题,做好了, 到了客户手机里就内存溢出了.其实有时候不同的手机和不同的系统对内存的要求不一样,尤 ...

  9. 移动端上传大文件到服务器,android上传大文件到服务器地址

    android上传大文件到服务器地址 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器 ...

最新文章

  1. paip.http 404错误 的解决
  2. eclipse添加maven环境
  3. racle的STRUCT和VARRAY的读写方法
  4. 第11课:动手实战基于 LSTM 轻松生成各种古诗
  5. python中pass的用法_python学习之getpass模块使用
  6. c# log4net
  7. 二学位计算机基础试题,计算机基础知识附试题().doc
  8. 淘宝为什么放弃SpringCloud、Dubbo,选择了这个牛逼的神仙框架!贼爽
  9. php ucfirst,Arale源码解析(3)——Base模块和Aspect模块
  10. 阿里云云数据库RDS基本介绍与购买流程(二十二)
  11. 洛谷-P1883-函数最小值
  12. python圣诞树代码成品图片动态_基于JS2Image实现圣诞树代码
  13. 工资买不起薪iphone,你还不跳槽?
  14. 一只大二狗的Android历程--文件输入输出流 SharedPreference
  15. VSCODE 使用调制控制台输出
  16. 抓包微信小程序openid的教程
  17. 数据库的三级模式、二级映像及数据的独立性
  18. 扛住100亿次请求——如何做一个“有把握”的春晚红包系统
  19. 这是一个最糟的创业时代 VC一片死寂
  20. 汽车租聘系统(面向对象)

热门文章

  1. jQuery,鼠标失去焦点事件
  2. java分时共享办公系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  3. SpringBoot实现分类搜索(模糊)查询 Pageable分页
  4. HTML关闭页面提示
  5. 电脑如何开机——教学
  6. 抖音直播带货开通条件及步骤要求
  7. 分子医学有哪些最新发表的毕业论文呢?
  8. Word转PDF,PNG,HTML神器XDOC
  9. python中Flask框架介绍
  10. ssm excel导入oracle,EXCEL导入