系統自帶的圖檔裁剪功能填坑
使用
-
1
Intent intent = new Intent(“com.android.camera.action.CROP”);
使用這麼一個意圖,就能将需要裁剪的圖檔設定進去,并進行裁剪,下面 看下這個意圖的具體用法:
- 2
Exta Options Table for image/* crop:
附加選項 資料類型 描述
crop String 發送裁剪信号
aspectX int X方向上的比例
aspectY int Y方向上的比例
outputX int 裁剪區的寬
outputY int 裁剪區的高
scale boolean 是否保留比例
return-data boolean 是否将資料保留在Bitmap中傳回
data Parcelable 相應的Bitmap資料
circleCrop String 圓形裁剪區域?
MediaStore.EXTRA_OUTPUT (“output”) URI 将URI指向相應的
file:///…,
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");//uri為圖檔的uri <br/>
// crop為true是設定在開啟的intent中設定顯示的view可以剪裁
intent.putExtra("crop", "true");
// aspectX aspectY 是寬高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX,outputY 是剪裁圖檔的寬高
intent.putExtra("outputX", 360);
intent.putExtra("outputY", 360);
intent.putExtra("return-data", true)
startActivityForResult(intent, SET_PIC);
這樣就可以在目前的activity的onActivityResult方法中擷取到裁剪後的圖檔.
- 3
遇坑
在不同的rom上,有的手機會直接閃退(連報錯資訊都沒有),經過排查得知是部分手機限制了 傳回bitmap的大小引起的問題.
- 4 解決
裁剪後,儲存圖檔到本地,并儲存資源路徑Uri,在onActivityResult()方法中,再提取對應的Uri圖檔資源轉換為Bitmap使用。
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(data, "image/*");
intent.putExtra("crop", true);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 360);
intent.putExtra("outputY", 360);
tempPhotoUri = Uri.parse("file://" + "/"+ tempHeadFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, tempPhotoUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(intent, SET_PIC);
之後在onActivityResult中 使用:
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(tempPhotoUri));
擷取到圖檔的bitmap,并将臨時檔案删除FileUtil.deleteFileSafely(tempHeadFile);