【问题标题】:Can not get full image quality from base64 string无法从 base64 字符串获得完整的图像质量
【发布时间】:2016-01-22 21:35:29
【问题描述】:

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

提前致谢。 **

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

    }

【问题讨论】:

    标签: java android mysql bitmap


    【解决方案1】:

    试试下面的代码:

    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()

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

    希望对你有帮助。

    【讨论】:

    • fileUri.getPath();显示错误。我的意思是语法错误。
    • “imgPath”是一个字符串吗?它应该是一个全局变量吗?
    • 抱歉回复晚了。但很高兴为您提供帮助。
    【解决方案2】:

    而不是使用

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

    尝试使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多