关于系统图片剪切工具的大图剪切方案

最近项目用到了一个剪切上传任意比例的功能,通过百度的千篇一律的方法:            
  
/**
   * 裁剪图片方法实现
  * 
   * @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卡上的。

你可能感兴趣的:(bitmap,uri)