拍照剪切步驟:
- 建立臨時檔案
- 啟動相機
- 拍照後啟動剪切
- 傳回剪切結果
建立臨時檔案
private Uri imageUri;//拍照後剪切用到Uri
private String picFileFullName;//剪切後圖檔路徑
File outputImage = new File(Environment.getExternalStorageDirectory(), "output_image.jpg");
picFileFullName = outputImage.getAbsolutePath();
try {
if (outputImage.exists()) {
outputImage.delete();
}
outputImage.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
imageUri = Uri.fromFile(outputImage);
啟動相機
這個過程有些手機會銷毀activity,拍照後回調直接崩潰。自行解決。
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);
拍照後啟動剪切
private void cropImage(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", true);
intent.putExtra("scale", true);
intent.putExtra("aspectX", );
intent.putExtra("aspectY", );
// outputX outputY 是裁剪圖檔寬高
intent.putExtra("outputX", );
intent.putExtra("outputY", );
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "output_image.jpg")));//剪切後直接輸出到這個檔案,就是替換了剛開始建立的檔案。
startActivityForResult(intent, PHOTO_CUT_RESULT);
}
傳回剪切結果
picFileFullName剪切後的圖檔路徑
選擇相冊圖檔剪切
- 建立臨時檔案
- 啟動相冊
- 選擇圖檔後啟動剪切
- 傳回剪切結果
建立臨時檔案
步驟和拍照一樣
啟動相冊
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, IMAGE_PICK_CODE);
Intent說明:
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI
這個缺點是如果有圖檔是同步到google相冊的話,圖庫裡面能看到一個auto backup的目錄,點進去選圖檔的話是無法擷取到圖檔的路徑的。Google被牆了的。不考慮這麼多。
ACTION_GET_CONTENT
在4.4版本中傳回圖檔的URI:content://com.Android.providers.media.documents/document/image:3951類似這樣。是以需要判斷系統版本進行URI轉換。
選擇圖檔後啟動剪切
跟拍照剪切一樣,剪切後輸出的檔案直接覆寫開始建立檔案
傳回剪切結果
picFileFullName剪切後的圖檔路徑