1. 程式人生 > >安卓讀取相簿選取圖片並壓縮

安卓讀取相簿選取圖片並壓縮

背景:

因需要從相簿中選擇照片後做其他操作,但是照片有可能較大,則需要進行壓縮。但是經過系統相簿選擇的圖片,我們獲取到的是URI,而不是實際檔案路徑。找了很多方法來將URI轉為實際路徑,最後沒有找到完善的方法。其實URI的設計,就不是讓大家將其轉化為實際路徑的,應該直接採用URI完成後續的業務,而不是再轉回實際路徑。

Demo原始碼及apk

https://gitee.com/cxyzy1/compressPictureDemo

選取圖片並壓縮的主要程式碼

 /**
     * 相簿選擇圖片
     */
    private void selectPicture() {
        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, REQUEST_CODE_GALLERY);
    }

    /**
     * 接收#startActivityForResult(Intent, int)呼叫的結果
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_GALLERY) {
            Uri pictureUri = data.getData();
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),pictureUri);
                BitmapUtils.compress(bitmap,1024);
                displayPicture(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 顯示圖片
     * @param imageUri 圖片的uri
     */
    private void displayPicture(Uri imageUri) {
        picIv.setImageURI(imageUri);
    }
    private void displayPicture(Bitmap bitmap) {
        picIv.setImageBitmap(bitmap);
    }