相信大家在项目开发中,不管是大小企业,服务器上传速度都是有限的,更何况不少公司是通过存在第三方的云存储如七牛中间站的,这就造成假设我们需要上传多张图片会很慢,给用户很差的体验了,这里是个人在项目中需求需要上传三十张照片,对图片压缩的心得,可能存在不足的地方,希望能指正。
废话客套话就不多说了,我们搬砖装修吧,核心实现代码如下:
// 根据路径获得图片并压缩,返回bitmap用于显示
public static Bitmap getSmallBitmap(String filePath) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, 480, 800); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(filePath, options); }//把bitmap转换成String public static String bitmapToString(String filePath) { Bitmap bm = getSmallBitmap(filePath); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 40, baos); byte[] b = baos.toByteArray(); return Base64.encodeToString(b, Base64.DEFAULT); }另外在我们存储图片还可以使用Base64转化为字节流保存文件,文件传输入,为了传输方便最好的办法是将文件转化成base64字串,再将base64字串转成字节流保存在文件了。不过这种做法虽然简单,但还要根据实际需求进行选择,弊端是不能转太大的文件,文件太大会造成效率问题,现在暂且这么处理。
具体代码如下: