Android中图片压缩方案详解_第1页
Android中图片压缩方案详解_第2页
Android中图片压缩方案详解_第3页
Android中图片压缩方案详解_第4页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论