Base64 编码在 Android 中花费的时间太长

lai*_*nio 5 java base64 android

我正在用相机捕捉图像。我将文件保存在公共照片目录中并将其保存Uri到该文件中。

我想将图像保存在 a 中,Base64 String然后将其放在 aHashMap中,然后将其放入 XML 文件中。

protected Void doInBackground(Void...voids) {
        options.inJustDecodeBounds = false;
        //Bitmap bmp = BitmapFactory.decodeFile(imageFilePath,options);
        InputStream in = null;
        try {
            in = getContentResolver().openInputStream(Uri.parse(mCurrentPhotoPath));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        options.inSampleSize = 2;
        Bitmap image = BitmapFactory.decodeStream(in,null,options);
        int imgHeight = image.getHeight();
        int imgWidth = image.getWidth();
        while(imgHeight>2000){
            imgHeight = imgHeight / 2;
        }
        while(imgWidth>2000){
            imgWidth = imgWidth / 2;
        }

        Bitmap test = Bitmap.createScaledBitmap(image,imgWidth,imgHeight,false);

        String stest = base64EncodeDecode.encodeToBase64(test);


        items.put("image",base64EncodeDecode.encodeToBase64(test);
        return null;
}
Run Code Online (Sandbox Code Playgroud)

Base64时间过长编码。 encodeToBase64方法

public String encodeToBase64(Bitmap image) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] b = baos.toByteArray();

    return Base64.encodeToString(b, Base64.DEFAULT);
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我编码时我是否做错了什么吗?

我希望我的问题很清楚。

亲切的问候!

Bee*_*gor 1

如果您收到!!! FAILED BINDER TRANSACTION !!!错误,可能是因为您向对方传递了太多数据Activity,所以您可以发送的数据量是有限制的。尝试将图像压缩到 50% 或 30%image.compress(Bitmap.CompressFormat.JPEG, 50, baos);