android 上传图片过大处理
在开发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 上传图片过大处理相关推荐
- android 大图片处理方法,android 上传图片过大处理
在开发Android应用时,会经常上传图片到服务器,会经常出现上传图片失败和时间过长的问题 为了解决这个问题,决定把照片进行压缩后上保存后本地缓存文件夹后再上传 使用方法: //压缩后得到新的图片路径 ...
- android上传图片过大处理
在开发Android应用时,会经常上传图片到服务器,会经常出现上传图片失败和时间过长的问题 为了解决这个问题,决定把照片进行压缩后上保存后本地缓存文件夹后再上传 使用方法: //压缩后得到新的图片路径 ...
- php android 图片上传,android上传图片到PHP的过程详解
这篇文章主要介绍了android上传图片到PHP的过程详解,需要的朋友可以参考下 今天在做上传头像的时候,总是提交连接超时错误,报错信息如下:XXXXXXSokcetTimeOutXXXXXXXX 然 ...
- 手机端如何把图片传到php后台,android上传图片到PHP后台全过程
DB2离线和在线全备.增量备份及恢复的操作步骤 1.离线全备份 1).首先确保没有用户使用DB2: $db2 list applications for db sample 2).停掉数据库并重新启动 ...
- ANDROID内存优化(大汇总——中)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...
- 中国移动开发者社区专访:学习Android的两大法宝
本文为原创,如需转载,请注明作者和出处,谢谢! 近日,接受了中国移动开发者社区的专访,谈了关于Android的一系列问题 http://dev.10086.cn/upload/developers_m ...
- Android加载大图片OOM异常解决
Android加载大图片OOM异常解决 参考文章: (1)Android加载大图片OOM异常解决 (2)https://www.cnblogs.com/jevan/archive/2012/07/05 ...
- Android手机内存图片读取,有效解决Android加载大图片内存溢出的问题
今天在交流群里,有人问我他经常遇到加载图片时内存溢出的问题,遇到的情况还是在自己的测试机或者手机里没有问题,做好了, 到了客户手机里就内存溢出了.其实有时候不同的手机和不同的系统对内存的要求不一样,尤 ...
- 移动端上传大文件到服务器,android上传大文件到服务器地址
android上传大文件到服务器地址 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器 ...
最新文章
- paip.http 404错误 的解决
- eclipse添加maven环境
- racle的STRUCT和VARRAY的读写方法
- 第11课:动手实战基于 LSTM 轻松生成各种古诗
- python中pass的用法_python学习之getpass模块使用
- c# log4net
- 二学位计算机基础试题,计算机基础知识附试题().doc
- 淘宝为什么放弃SpringCloud、Dubbo,选择了这个牛逼的神仙框架!贼爽
- php ucfirst,Arale源码解析(3)——Base模块和Aspect模块
- 阿里云云数据库RDS基本介绍与购买流程(二十二)
- 洛谷-P1883-函数最小值
- python圣诞树代码成品图片动态_基于JS2Image实现圣诞树代码
- 工资买不起薪iphone,你还不跳槽?
- 一只大二狗的Android历程--文件输入输出流 SharedPreference
- VSCODE 使用调制控制台输出
- 抓包微信小程序openid的教程
- 数据库的三级模式、二级映像及数据的独立性
- 扛住100亿次请求——如何做一个“有把握”的春晚红包系统
- 这是一个最糟的创业时代 VC一片死寂
- 汽车租聘系统(面向对象)