您的位置:首页 > 移动开发 > Android开发

关于安卓(Android)图片上传大图的两点建议。

2017-03-25 11:44 357 查看
上传带宽是及其有限的,那么怎么才能做到加快速度上传呢。

其实就是压缩大图容量大小的过程,而在这个过程中尽量不降低图片的清晰度,把图片压缩到较小的容量,就是下面要简单讲的两点内容。

现在手机的分辨率比较高,有点容量动不动就大道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 图片 压缩
相关文章推荐