Android中图片压缩方案详解

上传人:夏** 文档编号:498116439 上传时间:2023-09-16 格式:DOC 页数:15 大小:63.50KB
返回 下载 相关 举报
Android中图片压缩方案详解_第1页
第1页 / 共15页
Android中图片压缩方案详解_第2页
第2页 / 共15页
Android中图片压缩方案详解_第3页
第3页 / 共15页
Android中图片压缩方案详解_第4页
第4页 / 共15页
Android中图片压缩方案详解_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《Android中图片压缩方案详解》由会员分享,可在线阅读,更多相关《Android中图片压缩方案详解(15页珍藏版)》请在金锄头文库上搜索。

1、Android中图片压缩方案详解1、质量压缩法设置bitmap options属性,降低图片的质量,像素不会减少 第一个参数为需要压缩的bitmap图片对象,第二个参数为压缩后图片保存的位置 设置options 属性0-100,来实现压缩。private Bitmap compressImage(Bitmap image) ByteArrayOutputStream baos = new ByteArrayOutputStream(); press(Bitmap.CompressFormat.JPEG, 100, baos);/质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中

2、 int options = 100; while ( baos.toByteArray().length / 1024100) /循环判断如果压缩后图片是否大于100kb,大于继续压缩 baos.reset();/重置baos即清空baos press(Bitmap.CompressFormat.JPEG, options, baos);/这里压缩options%,把压缩后的数据存放到baos中 options -= 10;/每次都减少10 ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray();/把压缩

3、后的数据baos存放到ByteArrayInputStream中 Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);/把ByteArrayInputStream数据生成图片 return bitmap; 质量压缩不会减少图片的像素。它是在保持像素不变的前提下改变图片的位深及透明度等,来达到压缩图片的目的。进过它压缩的图片文件大小会有改变,但是导入成bitmap后占得内存是不变的。因为要保持像素不变,所以它就无法无限压缩,到达一个值之后就不会继续变小了。显然这个方法并不适用于缩略图,其实也不适用于想通过压缩图片减少内存的适用

4、,仅仅适用于想在保证图片质量的同时减少文件大小的情况而已。2、采样率压缩法private Bitmap getimage(String srcPath) BitmapFactory.Options newOpts = new BitmapFactory.Options(); /开始读入图片,此时把options.inJustDecodeBounds 设回true了 newOpts.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decode);/此时返回bm为空 newOpts.inJustDecodeBounds = fals

5、e; int w = newOpts.outWidth; int h = newOpts.outHeight; /现在主流手机比较多是1280*720分辨率,所以高和宽我们设置为 float hh = 1280f;/这里设置高度为1280f float ww = 720f;/这里设置宽度为720f /缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可 int be = 1;/be=1表示不缩放 if (w h & w ww) /如果宽度大的话根据宽度固定大小缩放 be = (int) (newOpts.outWidth / ww); else if (w hh) /如果高度高的话

6、根据宽度固定大小缩放 be = (int) (newOpts.outHeight / hh); if (be size * 1024) System.out.println(out.toByteArray().length); matrix.setScale(0.9f, 0.9f); result = Bitmap.createBitmap(result, 0, 0, result.getWidth(), result.getHeight(), matrix, true); out.reset(); press(Bitmap.CompressFormat.JPEG, 85, out); 缩放法

7、其实很简单,设定好matrix,在createBitmap就可以了。但是我们并不知道缩放比例,而是要求了图片的最终大小。直接用大小的比例来做的话肯定是有问题的,用大小比例的开方来做会比较接近,但是还是有差距。但是只要再做一下微调应该就可以了,微调的话就是修改过的图片大小比最终大小还大的话,就进行0.8的压缩再比较,循环直到大小合适。这样就能得到合适大小的图片,而且也能比较保证质量。4、JNI调用libjpeg库压缩JNI静态调用 bitherlibjni.c 中的方法来实现压缩Java_net_bither_util_NativeUtil_compressBitmap net_bither_u

8、til为包名,NativeUtil为类名,compressBitmap为native方法名,我们只需要调用saveBitmap()方法就可以,bmp 需要压缩的Bitmap对象, quality压缩质量0-100, 压缩后要保存的文件地址, optimize 是否采用哈弗曼表数据计算 品质相差5-10倍。jstring Java_net_bither_util_NativeUtil_compressBitmap(JNIEnv* env, jobject thiz, jobject bitmapcolor, int w, int h, int quality, jbyteArray , jboolean optimize) AndroidBitmapInfo infocolor; BYTE* pixelscolor; int ret; BYTE * data; BYTE *tmpdata; char * = jstrinTostring(env, ); if (ret = AndroidBitmap_getInfo(env, bitmapcolor, &infocolor) NewStringUTF(env, 0); if (ret = AndroidBitmap_lockPixels(env, bitmapcolor, &pixelscolor)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号