无法从base64字符串获得完整的图像质量

时间:2022-11-13 12:31:14

** I can save image in remote Mysql database using this code.But I can not get full image quality from this code.Images were in really bad quality.Can some one suggest a solution for it?

**我可以使用此代码将图像保存在远程Mysql数据库中。但是我无法从此代码中获得完整的图像质量。图像质量非常差。有人建议使用它的解决方案吗?

Thanks in advance. **

提前致谢。 **

public void onActivityResult(int reqCode, int resCode, Intent data) {

        if (resCode == RESULT_OK) {
            if (reqCode == 1) {
                Bitmap photo = null;
                imageURI = data.getData();
                try {



      photo = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageURI);
                } catch (IOException e) {
                    e.printStackTrace();
                }

                Image.setImageBitmap(photo);
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                photo.compress(Bitmap.CompressFormat.JPEG, 90, stream); //compress to which format you want.
                byte[] byte_arr = stream.toByteArray();
                String image_str = Base64.encodeToString(byte_arr, Base64.DEFAULT);
                try {
                    image_str1 = URLEncoder.encode(image_str, "UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }

            }

        }
        if (reqCode == CAMERA_REQUEST && resCode == RESULT_OK) {

            Bitmap photo = (Bitmap) data.getExtras().get("data");
            Image.setImageBitmap(photo);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            photo.compress(Bitmap.CompressFormat.JPEG, 90, stream); //compress to which format you want.
            byte[] byte_arr = stream.toByteArray();
            String image_str = Base64.encodeToString(byte_arr, Base64.DEFAULT);
            try {
                image_str1 = URLEncoder.encode(image_str, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            //  Photo=getBytes(photo);
        }

    }

2 个解决方案

#1


2  

Try below code :

试试以下代码:

if (requestCode == SELECT_FILE && 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]);
                imgPath = cursor.getString(columnIndex);
                cursor.close();
}else  if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK ) {  

                imgPath = fileUri.getPath();
                if (imgPath != null && !imgPath.isEmpty()) {                            

                encodeImagetoString();

                } else {
                Toast.makeText(getApplicationContext(),                                     getResources().getString(R.string.some_error_occured),
                                    Toast.LENGTH_LONG).show();
                        }
}

encodeImagetoString()

encodeImagetoString()

public void encodeImagetoString() {
        new AsyncTask<Void, Void, String>() {

            protected void onPreExecute() {

            };

            @Override
            protected String doInBackground(Void... params) {
                BitmapFactory.Options options = null;
                options = new BitmapFactory.Options();
                options.inSampleSize = 3;
                bitmap = BitmapFactory.decodeFile(imgPath, options);

                ByteArrayOutputStream stream = new ByteArrayOutputStream();

                bitmap.compress(Bitmap.CompressFormat.PNG, 50, stream);
                byte[] byte_arr = stream.toByteArray();

                encodedString = Base64.encodeToString(byte_arr, 0);
                return "";
            }

            @Override
            protected void onPostExecute(String msg) {
                Log.e("Success" , "Success");
            }

        }.execute(null, null, null);
    }

Hope it will help you.

希望它会对你有所帮助。

#2


2  

instead of using

而不是使用

photo.compress(Bitmap.CompressFormat.JPEG, 90, stream);

try using

尝试使用

photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);

#1


2  

Try below code :

试试以下代码:

if (requestCode == SELECT_FILE && 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]);
                imgPath = cursor.getString(columnIndex);
                cursor.close();
}else  if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK ) {  

                imgPath = fileUri.getPath();
                if (imgPath != null && !imgPath.isEmpty()) {                            

                encodeImagetoString();

                } else {
                Toast.makeText(getApplicationContext(),                                     getResources().getString(R.string.some_error_occured),
                                    Toast.LENGTH_LONG).show();
                        }
}

encodeImagetoString()

encodeImagetoString()

public void encodeImagetoString() {
        new AsyncTask<Void, Void, String>() {

            protected void onPreExecute() {

            };

            @Override
            protected String doInBackground(Void... params) {
                BitmapFactory.Options options = null;
                options = new BitmapFactory.Options();
                options.inSampleSize = 3;
                bitmap = BitmapFactory.decodeFile(imgPath, options);

                ByteArrayOutputStream stream = new ByteArrayOutputStream();

                bitmap.compress(Bitmap.CompressFormat.PNG, 50, stream);
                byte[] byte_arr = stream.toByteArray();

                encodedString = Base64.encodeToString(byte_arr, 0);
                return "";
            }

            @Override
            protected void onPostExecute(String msg) {
                Log.e("Success" , "Success");
            }

        }.execute(null, null, null);
    }

Hope it will help you.

希望它会对你有所帮助。

#2


2  

instead of using

而不是使用

photo.compress(Bitmap.CompressFormat.JPEG, 90, stream);

try using

尝试使用

photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);