天天看點

android 拍照和選擇相冊圖檔剪切

拍照剪切步驟:

  1. 建立臨時檔案
  2. 啟動相機
  3. 拍照後啟動剪切
  4. 傳回剪切結果

建立臨時檔案

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剪切後的圖檔路徑

選擇相冊圖檔剪切

  1. 建立臨時檔案
  2. 啟動相冊
  3. 選擇圖檔後啟動剪切
  4. 傳回剪切結果

建立臨時檔案

步驟和拍照一樣

啟動相冊

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剪切後的圖檔路徑