关于安卓(Android)图片上传大图的两点建议。
2017-03-25 11:44
357 查看
上传带宽是及其有限的,那么怎么才能做到加快速度上传呢。
其实就是压缩大图容量大小的过程,而在这个过程中尽量不降低图片的清晰度,把图片压缩到较小的容量,就是下面要简单讲的两点内容。
现在手机的分辨率比较高,有点容量动不动就大道6M左右,而上传图片的并没有这种需求,所以第一步就是降低分辨率,这个可以根据工作的实质要求来定。
降低分辨率,首先要识别图片长宽的比例,计算其缩放比例。
现在做一个画板,把缩放的图片放进去。
放进去以后呢,就对图片进行压缩了,每次都降低10%的质量,来循环压缩,直到它小于100k或者你设定的任意值。
下面就到了保存压缩好的图片的环节了,这里有两种保存方式,一种是正常保存方式,另外一种是无损保存图片的方式,这里由于copy_yuan大大已经是提供非常详细的调用jni文件保存图片,这里不再赘述。可以说是目前的终极保存图片的解决方法,也顺带解析了为何Android与ios保存图片机制的差异性。
博文地址在此:http://blog.csdn.net/copy_yuan/article/details/51353629。
其实就是压缩大图容量大小的过程,而在这个过程中尽量不降低图片的清晰度,把图片压缩到较小的容量,就是下面要简单讲的两点内容。
现在手机的分辨率比较高,有点容量动不动就大道6M左右,而上传图片的并没有这种需求,所以第一步就是降低分辨率,这个可以根据工作的实质要求来定。
降低分辨率,首先要识别图片长宽的比例,计算其缩放比例。
//计算缩放比 public static int getRatioSize(int bitWidth, int bitHeight) { // 图片最大分辨率 int imageHeight = 1280; int imageWidth = 960; // 缩放比 int ratio = 1; // 缩放比,由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可 if (bitWidth > bitHeight && bitWidth > imageWidth) { // 如果图片宽度比高度大,以宽度为基准 ratio = bitWidth / imageWidth; } else if (bitWidth < bitHeight && bitHeight > imageHeight) { // 如果图片高度比宽度大,以高度为基准 ratio = bitHeight / imageHeight; } // 最小比率为1 if (ratio <= 0) ratio = 1; return ratio; }
现在做一个画板,把缩放的图片放进去。
//把图片分辨率降为1280*960宽高,做一个画板。RGB565模式降低内存占有率。 Bitmap result = Bitmap.createBitmap(image.getWidth() / ratio, image.getHeight() / ratio, Bitmap.Config.RGB_565); Canvas canvas = new Canvas(result); Rect rect = new Rect(0, 0, image.getWidth() / ratio, image.getHeight() / ratio); canvas.drawBitmap(image, null, rect, null);
放进去以后呢,就对图片进行压缩了,每次都降低10%的质量,来循环压缩,直到它小于100k或者你设定的任意值。
ByteArrayOutputStream baos = new ByteArrayOutputStream(); result.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 100; while (baos.toByteArray().length / 1024 > 100) { // 循环判断如果压缩后图片是否大于500kb,大于继续压缩 baos.reset();// 重置baos即清空baos options -= 10;// 每次都减少10 result.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中 }
下面就到了保存压缩好的图片的环节了,这里有两种保存方式,一种是正常保存方式,另外一种是无损保存图片的方式,这里由于copy_yuan大大已经是提供非常详细的调用jni文件保存图片,这里不再赘述。可以说是目前的终极保存图片的解决方法,也顺带解析了为何Android与ios保存图片机制的差异性。
博文地址在此:http://blog.csdn.net/copy_yuan/article/details/51353629。
相关文章推荐
- 关于安卓(Android)图片上传大图的两点建议。
- 关于android上传图片,视频,音频到rails后台服务器
- 安卓中关于图片从网络获取,压缩,上传,下载,缩略图,缓存的一些处理总结(三)
- Android, 关于上传服务器图片Url,
- [置顶] 【Android开发技巧】 关于Webview拍照或从相册上传图片处理总结
- 安卓中关于图片从网络获取,压缩,上传,下载,缩略图,缓存的一些处理总结(一)
- Android 开发 使用WebUploader解决安卓微信浏览器上传图片中遇到的bug
- 关于android阿里云上传图片报错初始化错误的问题
- 安卓开发关于图片上传后出现旋转的问题
- Apache Cordova 安卓android上传图片或者文件 调用后台服务实现java代码 ft.upload(imageURI, uri, that.uploadSuccess, that.
- 关于安卓调用C#的WebService上传图片问题(不使用ksoap2)
- 关于MarkDown图片上传问题的建议
- android选取本地图片及关于图片压缩上传问题
- Android 关于七牛的上传图片遇到的问题
- 关于安卓调用C#的WebService上传图片问题(不使用ksoap2)
- 安卓中关于图片从网络获取,压缩,上传,下载,缩略图,缓存的一些处理总结(四)
- 关于Java后台处理android上传图片的问题
- Android关于图片如何压缩上传
- 关于部分android手机连拍模式,手机拍照上传的图片旋转了90度的c#解决方案
- 关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法