android調用系統裁剪圖片 返回模糊 不清晰的問題

基本這個功能都是在頭像設置的時候會用到

Android 從相機拍完照片 然後跳去系統自帶的裁剪 或者從相冊選取圖片裁剪  然後把裁剪好的圖片設置成頭像

這裏直接貼上跳到裁剪部分的代碼

  private void photoClip(Uri uri) {
        // 調用系統中自帶的圖片剪裁
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        intent.setDataAndType(uri, "image/*");
        // 下面這個crop=true是設置在開啓的Intent中設置顯示的VIEW可裁剪
        intent.putExtra("crop", "true");
        intent.putExtra("scale", true);
        // aspectX aspectY 是寬高的比例
        //這個是處理華爲裁剪是圓形框的問題
        if (Build.MANUFACTURER.equals("HUAWEI")) {
            intent.putExtra("aspectX", 9998);
            intent.putExtra("aspectY", 9999);
        } else {
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);
        }
        // outputX outputY 是裁剪圖片寬高  這個值越大清晰度越高  但是太大了會崩
        intent.putExtra("outputX", 800);
        intent.putExtra("outputY", 800);
        intent.putExtra("return-data", false);

        uritempFile = Uri.parse("file://" + "/" +       Environment.getExternalStorageDirectory().getPath() + "/" + System.currentTimeMillis() + ".jpg");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uritempFile);
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
        intent.putExtra("noFaceDetection", true);

        startActivityForResult(intent, CLIP_PHOTO_BY_SELF_REQUEST_CODE);
    }

註釋都寫了   然後下面是在onActivityResult裏面獲取裁剪之後圖片的方法

  @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK) return;
        switch (requestCode) {
            case CLIP_PHOTO_BY_SELF_REQUEST_CODE:
                if (uritempFile != null) {
                    bitmap = decodeUriBitmap(uritempFile);
                   
                    }
                }
                break;
        }
    }


    private Bitmap decodeUriBitmap(Uri uri) {

        Bitmap bitmap = null;

        try {

            bitmap = BitmapFactory.decodeStream(getActivity().getContentResolver().openInputStream(uri));

        } catch (FileNotFoundException e) {

            e.printStackTrace();

            return null;

        }

        return bitmap;

    }

大功告成  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章