Android调用系统相册及裁剪图片相关
来源:互联网 发布:淘宝代销怎么上架 编辑:程序博客网 时间:2024/06/05 00:57
1.调用系统相册
Intent intent = new Intent();// 设置文件类型 png,jpg,jpeg intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent,IMAGE_REQUEST_CODE);
2.获取到相片后,调用裁剪方法–startPhotoCrop(Uri uri)
@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { // 结果码不等于取消时候 if (resultCode != Activity.RESULT_CANCELED) { switch (requestCode) { case IMAGE_REQUEST_CODE://选择相片 //调用裁剪图片方法 startPhotoCrop(data.getData()); break; case RESULT_REQUEST_CODE://裁剪 if (data != null) { //将图片显示在视图中 getImageToView(data); } break; } } super.onActivityResult(requestCode, resultCode, data); }
3.裁剪图片
/** * 裁剪图片方法实现 * * @param uri */ public void startPhotoCrop(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 设置裁剪 intent.putExtra("crop", "true"); // aspectX aspectY 宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 裁剪图片宽高 intent.putExtra("outputX", 320); intent.putExtra("outputY", 320); intent.putExtra("return-data", true); startActivityForResult(intent, RESULT_REQUEST_CODE); }
4.如果要上传操作,则需要将图片保存起来。
Bundle extras = data.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); saveBitmapToSDCardPrivateCacheDir(photo,fileName,Context);//save }
// 以Bitmap格式保存到sd卡中(图片路径:context.getExternalCacheDir()+File.separator()+fileName)public static boolean saveBitmapToSDCardPrivateCacheDir(Bitmap bitmap,String fileName, Context context) { if (isSDCardMounted()) {//判断sd卡是否已加载 BufferedOutputStream bos = null; // 获取私有的Cache缓存目录 File file = context.getExternalCacheDir(); if (!file.exists()) { file.mkdirs(); } try { bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName))); if (fileName != null&& (fileName.contains(".png") || fileName.contains(".PNG"))) { bitmap.compress(Bitmap.CompressFormat.PNG, 90, bos);//90表示压缩率 } else { bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bos); } bos.flush(); } catch (Exception e) { e.printStackTrace(); } finally { if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } } return true; } else { return false; } }
以上操作即可获得裁剪后的图片,并保存到sd卡中。
事实上我自己写的时候会遇到裁剪后的图片很模糊,调整压缩率也没效果。
5.解决裁剪后的图片模糊问题
//return-data Parcelable类型 是否将数据保留在Bitmap中返回// 开始return-data设置了true的话直接返回bitmap,可能会很占内存intent.putExtra("return-data", true);//返回的bitmap是还存在内存中的缩略图,所以很模糊,解决办法:把剪切的图片保存起来不直接返回bitmap。
–>修改裁剪图片方法
//Uri imageUri=Uri.fromFile(new File(imagePath)); /** * 裁剪图片方法实现 * * @param uri */ public void startPhotoCrop(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 设置裁剪 intent.putExtra("crop", "true"); // aspectX aspectY 宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 裁剪图片宽高 intent.putExtra("outputX", 320); intent.putExtra("outputY", 320); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, RESULT_REQUEST_CODE); }
这种方法设置裁剪参数时,处理返回的数据方法
//decodeUriAsBitmap(imageUri); private Bitmap decodeUriAsBitmap(Uri uri) { Bitmap bitmap = null; try { // 先通过getContentResolver方法获得一个ContentResolver实例, // 调用openInputStream(Uri)方法获得uri关联的数据流stream // 把上一步获得的数据流解析成为bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)); } catch (FileNotFoundException e) { e.printStackTrace(); return null; } return bitmap; }
参考:(http://blog.csdn.net/u011192000/article/details/50126447)
0 0
- Android调用系统相册及裁剪图片相关
- 调用Android系统相册并裁剪图片
- android调用系统相机、调用系统相册,调用系统图片裁剪报错的解决方案
- Android拍照及图片裁剪、调用系统相册(兼容6.0以上权限处理及7.0以上文件管理)
- Android 调用相机、打开相册、裁剪图片
- android 无法调用相册图片进行裁剪
- Android 调用系统相册(带裁剪)
- android调用系统相机、相册、裁剪
- Android中调用系统相机、系统相册来获取图片,并裁剪图片。
- Android拍照及相册图片裁剪操作
- android裁剪相册图片
- 调用系统相册选取照片并使用系统裁剪图片
- android 4.4以上调用系统拍照与相册附带图片裁剪
- 实践--调用系统相册,裁剪图片并设置圆形显示
- Android7.0调用系统相机拍照、相册选择图片、裁剪
- Android调用相机实现拍照并裁剪图片,调用手机中的相册图片并裁剪图片
- Android 调用系统拍照及相册裁剪后作为头像,兼容到5.0
- Android 启动系统相机,相册,裁剪图片及6.0权限管理
- queue
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- HDU 1559 最大子矩阵 [二维树状数组]【数据结构】
- 程序改错
- 初学mysql(九)-数据库之存储过程、函数与游标(上)
- Android调用系统相册及裁剪图片相关
- 华为VoWiFi解决方案技术解析 VOWIFI/VOLTE无缝切换
- Spark on YARN client模式作业运行全过程分析
- 索智的SC5806开发板的调试步骤V1.0开发板的原始IMG测试(有线网卡不能上网)
- X264编码流程
- 如何生成OBB(OrientedboundingBox)方向包围盒
- 招标采购过程中如何防范招标风险?
- Java网络编程_基本网络支持(一)
- 【PHP】PHP基础知识与C++、Java等C家族的重点区别