最近项目用到了一个剪切上传任意比例的功能,通过百度的千篇一律的方法:
/** * 裁剪图片方法实现 * * @param uri */ public void startPhotoZoom(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", 150); intent.putExtra("outputY", 150); intent.putExtra("noFaceDetection", true); // 无人脸识别 intent.putExtra("return-data", true); startActivityForResult(intent, 2); }
这个方法虽然可以剪切固定大小的图片,但是只限定于图片比较小的情况,当图片比较大,比如照相机照的的图片,就会出现死机或者没反应,通过一天的努力,终于找到了解决方法,呵呵……其实方法很简单,先上代码:
/** * 剪切后的临时图片 // file */ @SuppressLint("SdCardPath") private static final String IMAGE_FILE_LOCATION = "file:///sdcard/image/tempArticleImage.jpg"; private Uri tempImageUri = Uri.parse(IMAGE_FILE_LOCATION); /** * 裁剪图片方法实现 * * @param uri * 图片地址 */ public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 设置剪切后的输出目录 intent.putExtra(MediaStore.EXTRA_OUTPUT, tempImageUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); // 无人脸识别 intent.putExtra("return-data", false);// 不绑定Bitmap数据 startActivityForResult(intent, 2); }
上面两个方法比较下,都是设置系统剪切方法的参数,唯一最不同的在于前一个方法用的是返回Bitmap,后一个返回的是一个地址Uri,即intent.putExtra(MediaStore.EXTRA_OUTPUT,tempImageUri);这样切到的图片就保存在这个tempImageUri地址里面,那么就不会造成内存不够用,我们这个时候就可以操作
tempImageUri对应的图片了,一般保存在SD卡上的。