将Android中的Base64编码字符串转换为图像视图

27

我想将base64编码的字符串转换为位图,以便我可以将它放在图像视图中,但出现了错误,如下所示:

D/skia(7490):--- decoder->decode返回false并且位图返回null值

我的代码是:

byte[] imageAsBytes = Base64.decode(imageData);

image.setImageBitmap(BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length));

你的base64字符串是从哪里获取的?你确定它是有效的吗? - draksia
我从 Web 服务获取 base64 字符串。我们怎样才能检查它是否有效? - Baskar
1
你能发布获取Base64字符串的代码吗? - draksia
ImageData只是一个base64编码的字符串。字符串长度在webservice和设备获取的时候是相同的,但我无法在imageview中显示它。 - Baskar
6个回答

52

首先,您需要检查要解码的字符串是否有效并具有所需的解码值。为此,您可以执行以下操作:

// assuming str is the string to be decoded
if (typeof str === 'string' && /^[0-9a-fA-F]+$/i.test(str)) {
  // decode the string
}
filePath= Environment.getExternalStorageDirectory()
                        + "/SaudiScore/temporary_holder.jpg";
Bitmap selectedImage =  BitmapFactory.decodeFile(filePath);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
selectedImage.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();
String strBase64=Base64.encodeToString(byteArray, 0);

然后,您可以解码刚刚编码的字符串,并通过执行以下操作获取图像:

byte[] decodedString = Base64.decode(strBase64, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
image.setImageBitmap(decodedByte);

实际上,我得到了一个编码字符串,发送到网络服务并返回到设备时,我遇到了这个错误。 - Baskar
1
我之前也遇到了同样的错误,面对着同样的问题。你需要做的就是检查字符串的大小是否与你保存到远程数据库之前编码的图像大小相同,一旦你确保它们完全一致,你就可以使用上述代码获取图像。 - Husam A. Al-ahmadi
我正在比较字符串的长度和大小,它们都是相同的,但是我无法在ImageView中显示。 - Baskar
你在数据库中保存字符串时使用了什么类型的数据? - Husam A. Al-ahmadi
还有,您是如何将字符串发布到远程数据库以保存的? - Husam A. Al-ahmadi
1
我没有保存到数据库,直接使用字符串。发送时也只使用字符串。我需要保存到数据库吗? - Baskar

28
byte[] decodedString = Base64.decode(mBase64string, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0,decodedString.length);
mImageView.setImageBitmap(decodedByte);

7
String base = "Base64 string values of some image";

byte[] imageAsBytes = Base64.decode(base.getBytes(), Base64.DEFAULT);

ImageView image = (ImageView) this.findViewById(R.id.imageView1);

image.setImageBitmap(BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length));

试一下这段代码。


当我使用 setImageBitmap 函数时,我的图片没有显示出来。这是为什么呢? - Zohab Ali
首先检查您的base64是否正确。如果正确,则可能是在加载视图后尝试添加图像。也要检查您的图像视图ID。 - Nikhil Dinesh

0

这个方法可以帮助:

private void setExistImage(ImageView imageView, String base64String){
    if (!base64String.isEmpty()) {
        byte[] bytes = Base64.decode(base64String, Base64.DEFAULT);
        imageView.setImageBitmap(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
    }
}

0
将base64字符串解码/转换为图像。
    imageBytes = Base64.decode(imageString, Base64.DEFAULT);
    Bitmap decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0,imageBytes.length);
    image.setImageBitmap(decodedImage);

请解释原始提问者做错了什么。 - Yserbius

0
 byte[] decodedString = Base64.decode(strBase64, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
image.setImageBitmap(decodedByte);

我曾使用上述解决方案,但始终返回错误,如解码字符串为空、非法状态异常等。我所做的就是将其放入 try catch 块中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接