版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android中图片压缩方案详解Android中图片压缩方案详解Android中图片压缩方案详解资料仅供参考文件编号:2022年4月Android中图片压缩方案详解版本号: A修改号: 1页 次: 1.0 审 核: 批 准: 发布日期: Android中图片压缩方案详解1、质量压缩法设置bitmap options属性,降低图片的质量,像素不会减少 第一个参数为需要压缩的bitmap图片对象,第二个参数为压缩后图片保存的位置 设置options 属性0-100,来实现压缩。private Bitmap compressImage(Bitmap image) ByteArrayOutputStr
2、eam baos = new ByteArrayOutputStream(); 100, baos);ength / 1024100) ength); Matrix matrix = new Matrix(); (zoom, zoom); Bitmap result = (image, 0, 0, (), (), matrix, true); (); 85, out); while().length size * 1024) , ; result = (result, 0, 0, (), (), matrix, true); (); 85, out); 缩放法其实很简单,设定好matrix,在
3、createBitmap就可以了。但是我们并不知道缩放比例,而是要求了图片的最终大小。直接用大小的比例来做的话肯定是有问题的,用大小比例的开方来做会比较接近,但是还是有差距。但是只要再做一下微调应该就可以了,微调的话就是修改过的图片大小比最终大小还大的话,就进行的压缩再比较,循环直到大小合适。这样就能得到合适大小的图片,而且也能比较保证质量。4、JNI调用libjpeg库压缩JNI静态调用 中的方法来实现压缩Java_net_bither_util_NativeUtil_compressBitmap net_bither_util为包名,NativeUtil为类名,compressBitmap
4、为native方法名,我们只需要调用saveBitmap()方法就可以,bmp 需要压缩的Bitmap对象, quality压缩质量0-100, fileName 压缩后要保存的文件地址, optimize 是否采用哈弗曼表数据计算 品质相差5-10倍。jstring Java_net_bither_util_NativeUtil_compressBitmap(JNIEnv* env, jobject thiz, jobject bitmapcolor, int w, int h, int quality, jbyteArray fileNameStr, jboolean optimize)
5、AndroidBitmapInfo infocolor; BYTE* pixelscolor; int ret; BYTE * data; BYTE *tmpdata; char * fileName = jstrinTostring(env, fileNameStr); if (ret = AndroidBitmap_getInfo(env, bitmapcolor, &infocolor) NewStringUTF(env, 0); if (ret = AndroidBitmap_lockPixels(env, bitmapcolor, &pixelscolor) 0) LOGE(Andr
6、oidBitmap_lockPixels() failed ! error=%d, ret); BYTE r, g, b; data = NULL; data = malloc(w * h * 3); tmpdata = data; int j = 0, i = 0; int color; for (i = 0; i h; i+) for (j = 0; j 16); g = (color & 0 x0000FF00) 8); b = color & 0 x000000FF; *data = b; *(data + 1) = g; *(data + 2) = r; data = data +
7、3; pixelscolor += 4; AndroidBitmap_unlockPixels(env, bitmapcolor); int resultCode= generateJPEG(tmpdata, w, h, quality, fileName, optimize); free(tmpdata); if(resultCode=0) jstring result=(*env)-NewStringUTF(env, error); error=NULL; return result; return (*env)-NewStringUTF(env, 1); ength / 1024 max
8、Size) ength / 1024 maxSize) ength / 1024 maxSize) etType(image/*), REQUEST_PICK_IMAGE); else Intent intent = new Intent; ; (image/*); startActivityForResult(intent, REQUEST_KITKAT_PICK_IMAGE); 根据URI获取对应的文件路径 在我们从图库中选择图片后回调给我们的()可能是URI,我们平时对文件的操作基本上都是基于路径然后进行各种操作与转换,如今我们需要将URI对应的文件路径找出来,具体参考代码如下:publ
9、ic static String getPathByUri(Context context, Uri data) if return getPathByUri4BeforeKitkat(context, data); else return getPathByUri4AfterKitkat(context, data); oString()pareTo(content) = 0) Cursor cursor = ().query(data, new String _data , null, null, null); if () filename = (0); else if ().toStri
10、ng()pareTo(file) = 0) eplace(, );qualsIgnoreCase(type) return () + / + split1; else if (isDownloadsDocument(uri) quals(type) contentUri = else if (video.equals(type) contentUri = else if (audio.equals(type) contentUri = final String selection = _id=; final String selectionArgs = new String split1 ;
11、return getDataColumn(context, contentUri, selection, selectionArgs); else if (content.equalsIgnoreCase() qualsIgnoreCase() This is useful for * MediaStore Uris, and other file-based ContentProviders. * * param context * The context. * param uri * The Uri to query. * param selection * (Optional) Filt
12、er used in the query. * param selectionArgs * (Optional) Selection arguments used in the query. * return The value of the _data column, which is typically a file path. */ public static String getDataColumn(Context context, Uri uri, String selection, String selectionArgs) Cursor cursor = null; final
13、String column = _data; final String projection = column ; try cursor = ().query(uri, projection, selection, selectionArgs, null); if (cursor != null & () final int column_index = (column); return (column_index); finally if (cursor != null) (); return null; /* * param uri * The Uri to check. * return Whether the Uri authority is ExternalStorageProvider. */ public static boolean isExternalStorageDocument(Uri uri) return .equals(); /* * param uri * The Uri to check. * return Whether the Uri authority is DownloadsProvider. */ public
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年鹰潭职业技术学院单招综合素质考试题库带答案详解(综合卷)
- 2025年上海市浦东新区东方芦潮港幼儿园招聘备考题库(区内流动)及1套参考答案详解
- 2026年陕西航空职业技术学院单招职业适应性测试题库(含答案详解)
- 2026年防城港职业技术学院单招职业倾向性考试题库及一套完整答案详解
- 2026年青岛恒星科技学院单招职业适应性测试题库含答案详解ab卷
- 2025年南宁市第十中学星光校区(初中部)招聘备考题库及一套答案详解
- 2026年黄山职业技术学院单招职业倾向性测试题库及答案详解(历年真题)
- 2025年贵州省文化产业投资管理有限公司招聘备考题库及答案详解(考点梳理)
- 2026年青海卫生职业技术学院单招综合素质考试题库及答案详解1套
- 2026年陕西邮电职业技术学院单招综合素质考试题库含答案详解(b卷)
- 2026年宁夏葡萄酒与防沙治沙职业技术学院自主公开招聘工作人员考试参考试题及答案解析
- 2026中央台办所属事业单位招聘10人笔试备考试题及答案解析
- 2025年“安全生产月”《安全知识》培训考试题库及答案
- 2026浙江台州市港航事业发展中心招聘2人考试备考试题及答案解析
- 腹膜透析护理实践指南(2025年版)
- GB/T 1535-2026大豆油
- 2026校招:远大物产集团试题及答案
- 康复中心考核制度
- 点金手丰年课件在线看
- 2026年课件-冀人版二年级下册科学全册新质教学课件(2026年春改版教材)-新版
- DB34T∕ 2270-2014 铜阳极泥铜、金、银、硒、铋、铅含量的测定波长色散X射线荧光光谱法
评论
0/150
提交评论