天天看點

Android中(圖檔裁剪)問題處理 系統自帶的圖檔裁剪功能填坑

系統自帶的圖檔裁剪功能填坑

使用

  • 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);