2

画像ギャラリーで選択した画像を縮小して、php 経由でサーバーにアップロードできるようにする方法について質問があります。

したがって、アクションの順序は次のとおりです。

1)ギャラリーから選択した画像を取得する (DONE)

2)縮小してjpgに圧縮します(ここで立ち往生しました)

3)サーバーへのアップロード async(DONE)

1番目と3番目のステップを接続する必要があります.これまでのところ、これを行っています:

選択した画像を取得:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();

            Bitmap yourSelectedImage = BitmapFactory.decodeFile(picturePath); 

            new async_upload().execute(picturePath.toString());
        }

    }

非同期アップロード IT:

public class async_upload extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... arg0) {
            uploadFile(arg0[0]);
            return "asd";
        }

        @Override       
        protected void onPostExecute(String result) {

        }
    } 

     public int uploadFile(String sourceFileUri) {
..............Code for uploading works.......
}

そして、画像を縮小するための私の関数。

private Bitmap decodeUri(Uri selectedImage) throws FileNotFoundException {

        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage), null, o);

        // The new size we want to scale to
        final int REQUIRED_SIZE = 640;

        // Find the correct scale value. It should be the power of 2.
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE
               || height_tmp / 2 < REQUIRED_SIZE) {
                break;
            }
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }

        // Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage), null, o2);

    }

ご覧のとおり、選択した画像の URI を送信してuploadFile非同期にアップロードしています。私の問題は、選択した画像の「コピーを作成」し、元の画像の代わりにこの画像を圧縮/スケーリングして送信する方法です。もちろん、ユーザーの画像を変更したくはありませんが、縮小版を送信します。

何か案は?ありがとうございました!

4

1 に答える 1