Android之获取本地图片并压缩方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android之获取本地图片并压缩方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2673字,纯文字阅读大概需要4分钟。
内容图文
这两天在做项目时,做到上传图片功能一块时,碰到两个问题,一个是如何获取所选图片的路径,一个是如何压缩图片,在查了一些资料和看了别人写的后总算折腾出来了,在此记录一下。
首先既然要选择图片,我们就先要获取本地所有的图片,Android已经为我们封装好了该意图。
1 Intent intent = new Intent(Intent.ACTION_PICK, null);//从列表中选择某项并返回所有数据2intent.setDataAndType( 3 MediaStore.Images.Media.EXTERNAL_CONTENT_URI,//得到系统所有的图片4 "image/*");//图片的类型,image/*为所有类型图片5 startActivityForResult(intent, PHOTO_GALLERY);
然后我们重写onActivityResult方法。
在Android1.5后系统会调用MediaScanner服务进行后台扫描,索引歌曲,图片,视频等信息,并将数据保存在android.provider.MediaStore.Images.Thumbnails 和android.provider.MediaStore.Video.Thumbnails这两个数据库中。
所以我们需要使用Activity.managedQuery(uri, projection, selection, selectionArgs, sortOrder)方法从数据中获取相应数据。
uri: 需要返回的资源索引
projection: 用于标识有哪些数据需要包含在返回数据中。
selection: 作为查询符合条件的过滤参数,类似于SQL语句中Where之后的条件判断。
selectionArgs: 同上。
sortOrder: 对返回信息进行排序。
1 @Override 2 protected void onActivityResult(int requestCode, int resultCode, Intent data) 3 { 4switch (requestCode) 5 { 6//请求为获取本地图品时 7case PHOTO_GALLERY: 8 { 9//图片信息需包含在返回数据中10 String[] proj ={MediaStore.Images.Media.DATA}; 11//获取包含所需数据的Cursor对象 12 @SuppressWarnings("deprecation") 13 Cursor cursor = managedQuery(data.getData(), proj, null, null, null); 14//获取索引15int photocolumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 16//将光标一直开头17 cursor.moveToFirst(); 18//根据索引值获取图片路径19 String path = cursor.getString(photocolumn); 202122break; 23 } 2425default: 26break; 27 }
以上,我们便可取得本地图片路径了,接下来我们队图片进行压缩处理。
1 // 先将所选图片转化为流的形式,path所得到的图片路径 2 FileInputStream is = new FileInputStream(path); 3//定义一个file,为压缩后的图片 4 File f = new File("图片保存路径","图片名称"); 5int size = " "; 6 Options options = new Options(); 7 options.inSampleSize = size; 8//将图片缩小为原来的 1/size ,不然图片很大时会报内存溢出错误 9 Bitmap image = BitmapFactory.decodeStream(inputStream,null,options); 1011is.close(); 1213 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 14 image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//这里100表示不压缩,将不压缩的数据存放到baos中15int per = 100; 16while (baos.toByteArray().length / 1024 > 500) { // 循环判断如果压缩后图片是否大于500kb,大于继续压缩17 baos.reset();// 重置baos即清空baos18 image.compress(Bitmap.CompressFormat.JPEG, per, baos);// 将图片压缩为原来的(100-per)%,把压缩后的数据存放到baos中19 per -= 10;// 每次都减少102021 } 22//回收图片,清理内存23if(image != null && !image.isRecycled()){ 24 image.recycle(); 25 image = null; 26System.gc(); 27 } 28 ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中29btout.close(); 30 FileOutputStream os; 31 os = new FileOutputStream(f); 32//自定义工具类,将输入流复制到输出流中33 StreamTransferUtils.CopyStream(btinput, os); 34 btinput.close(); 35 os.close();
完成以后,我们可以在指定的图片保存路径下看到压缩的图片。
原文:http://www.cnblogs.com/zhrxidian/p/4122776.html
内容总结
以上是互联网集市为您收集整理的Android之获取本地图片并压缩方法全部内容,希望文章能够帮你解决Android之获取本地图片并压缩方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。