说明
使用Android系统中的Intent来进行简单的图片裁剪,裁剪完成后的数据可以保存为完整图片文件,或者获得一个较小的bitmap
裁剪Intent及处理方式
从相册选择图片进行裁剪
/**
* 从相册中选取图片进行裁剪.
*
* @param imageUri 截取完成后图片保存位置
* @param aspectX 裁切区域选取时横向的比例
* @param aspectY 裁切区域选取时纵向的比例
* @param outputX 裁切完成后图片输出横向像素
* @param outputY 裁切完成后图片输出纵向像素
* @param returnData
* 是否在{@link android.app.Activity#onActivityResult(int, int, Intent)}中返回一个较小的{@code Bitmap}
* @return 返回一个可以通过
* {@link android.app.Activity#startActivityForResult(Intent, int)}启动的{@link Intent}
*/
private Intent newGalleryCropIntent(Uri imageUri, int aspectX, int aspectY, int outputX, int
outputY, boolean returnData) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("scale", true);
intent.putExtra("return-data", returnData);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
return intent;
}
拍照后进行裁剪
- 拍照
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (cameraIntent.resolveActivity(getPackageManager()) != null) {
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);// imageUri为拍照后存储图片的位置
startActivityForResult(cameraIntent, REQUEST_CODE_TAKE_BIG);
}
- 裁剪图片
/**
* 根据给定的Uri位置裁切图片.
*
* @param imageUri 要被裁切的图片位置/本方法中同时也是裁切完成后保存图片的位置
* @param aspectX 裁切区域选取时横向的比例
* @param aspectY 裁切区域选取时纵向的比例
* @param outputX 裁切完成后图片输出横向像素
* @param outputY 裁切完成后图片输出纵向像素
* @param returnData
* 是否在{@link android.app.Activity#onActivityResult(int, int, Intent)}中返回一个较小的{@code Bitmap}
* @return 返回一个可以通过
* {@link android.app.Activity#startActivityForResult(Intent, int)}启动的{@link Intent}
*/
private Intent newCropIntent(Uri imageUri, int aspectX, int aspectY, int outputX, int
outputY, boolean returnData) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("scale", true);
intent.putExtra("return-data", returnData);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
return intent;
}
裁剪完成后的数据处理
-
若输出到本地文件后读取为Bitmap对象使用
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
-
直接返回一个较小的Bitmap对象
Bitmap bitmap = data.getParcelableExtra("data");// data为onActivityResult方法中返回的Intent