說明
使用Android系統(tǒng)中的Intent來進(jìn)行簡單的圖片裁剪昏翰,裁剪完成后的數(shù)據(jù)可以保存為完整圖片文件杏愤,或者獲得一個(gè)較小的bitmap
裁剪Intent及處理方式
從相冊選擇圖片進(jìn)行裁剪
/**
* 從相冊中選取圖片進(jìn)行裁剪.
*
* @param imageUri 截取完成后圖片保存位置
* @param aspectX 裁切區(qū)域選取時(shí)橫向的比例
* @param aspectY 裁切區(qū)域選取時(shí)縱向的比例
* @param outputX 裁切完成后圖片輸出橫向像素
* @param outputY 裁切完成后圖片輸出縱向像素
* @param returnData
* 是否在{@link android.app.Activity#onActivityResult(int, int, Intent)}中返回一個(gè)較小的{@code Bitmap}
* @return 返回一個(gè)可以通過
* {@link android.app.Activity#startActivityForResult(Intent, int)}啟動(dòng)的{@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;
}
拍照后進(jìn)行裁剪
- 拍照
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (cameraIntent.resolveActivity(getPackageManager()) != null) {
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);// imageUri為拍照后存儲(chǔ)圖片的位置
startActivityForResult(cameraIntent, REQUEST_CODE_TAKE_BIG);
}
- 裁剪圖片
/**
* 根據(jù)給定的Uri位置裁切圖片.
*
* @param imageUri 要被裁切的圖片位置/本方法中同時(shí)也是裁切完成后保存圖片的位置
* @param aspectX 裁切區(qū)域選取時(shí)橫向的比例
* @param aspectY 裁切區(qū)域選取時(shí)縱向的比例
* @param outputX 裁切完成后圖片輸出橫向像素
* @param outputY 裁切完成后圖片輸出縱向像素
* @param returnData
* 是否在{@link android.app.Activity#onActivityResult(int, int, Intent)}中返回一個(gè)較小的{@code Bitmap}
* @return 返回一個(gè)可以通過
* {@link android.app.Activity#startActivityForResult(Intent, int)}啟動(dòng)的{@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;
}
裁剪完成后的數(shù)據(jù)處理
-
若輸出到本地文件后讀取為Bitmap對(duì)象使用
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
-
直接返回一個(gè)較小的Bitmap對(duì)象
Bitmap bitmap = data.getParcelableExtra("data");// data為onActivityResult方法中返回的Intent