Base64转换显示巨大的字符串android

时间:2017-01-06 09:52:36

标签: android base64

我正在将图像转换为Base64以将其发送到服务器,但转换后的字符串是一个巨大的字符串。如果转换后的图像大约为100kb,则转换后的base64值字符串为~1mb ...

我的代码......

  protected String doInBackground(Void...arg0) {
        Cursor cursor = mydb.getDat1();
        //fetching the image location
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {

            for( int i=0 ;  i< 1 ; i++ )
            {
                if( cursor.getColumnName(i) != null )
                {
                    try
                    {

                        if( cursor.getString(i) != null )
                        {
                            //saving image to bitmap
                             Bitmap bitmap = BitmapFactory.decodeFile(cursor.getString(cursor.getColumnIndex(DBHelper.PHOTO)));
                           //converting it to base64
                             String en= encodeToBase64( resize(bitmap,1080,1920), Bitmap.CompressFormat.JPEG,100);

                            Log.d("base",en);
                            //inserting it to table pic
                            mydb.insertpic(cursor.getInt(1),en);
                        }

                    }
                    catch( Exception ignored)
                    {

                    }
                }
            }
            cursor.moveToNext();
        }

        cursor.close();
        mydb.updatebin();
        return null;
    }


private static Bitmap resize(Bitmap image, int maxWidth, int maxHeight) {

    //for conerting images to lower resolution
    if (maxHeight > 0 && maxWidth > 0) {
        int width = image.getWidth();
        int height = image.getHeight();
        float ratioBitmap = (float) width / (float) height;
        float ratioMax = (float) maxWidth / (float) maxHeight;
        int finalWidth = maxWidth;
        int finalHeight = maxHeight;
        if (ratioMax > 1) {
            finalWidth = (int) ((float)maxHeight * ratioBitmap);
        } else {
            finalHeight = (int) ((float)maxWidth / ratioBitmap);
        }
        image = Bitmap.createScaledBitmap(image, finalWidth, finalHeight, true);
        return image;
    } else {
        return image;
    }
}

   public static String encodeToBase64(Bitmap image, Bitmap.CompressFormat compressFormat, int quality)
{
    //converting image to base 64
    ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
    image.compress(compressFormat, quality, byteArrayOS);
    return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT);
}

如何解决此问题。?

2 个答案:

答案 0 :(得分:0)

这是代码:

获取图片的代码:

if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
                final Uri imageUri = data.getData();
                final InputStream imageStream = getContentResolver().openInputStream(imageUri);
                final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
                String encodedImage = encodeImage(selectedImage);
            }

尝试压缩然后转换(位图)

 private String encodeImage(Bitmap bm)
    {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG,100,baos);
        byte[] b = baos.toByteArray();
        String encImage = Base64.encodeToString(b, Base64.DEFAULT);

        return encImage;
    }

答案 1 :(得分:0)

我的猜测是encondeToBase64()正在创建一个大图像文件,因为你将原始图像的大小调整为1920x1080并转换为质量为100的jpeg,然后文件增长1.333...次转换为base64时的大小。