当前位置: 首页 > 面试题库 >

在Java中将base64字符串转换为Image

桂梓
2023-03-14
问题内容

我有一个图像通过JSON字符串发送给我。我想将该字符串转换为我的Android应用程序中的图像,然后显示该图像。

JSON字符串如下所示:

"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVI..."

注意:我用…截断了字符串。

我有一个函数(我认为)可以将字符串转换为图像。我这样做对吗?

public Bitmap ConvertToImage(String image){
    try{
        InputStream stream = new ByteArrayInputStream(image.getBytes());
        Bitmap bitmap = BitmapFactory.decodeStream(stream);                 
        return bitmap;  
    }
    catch (Exception e) {
        return null;            
    }
}

然后我尝试像这样在我的android活动上显示它

String image = jsonObject.getString("barcode_img");         
Bitmap myBitmap = this.ConvertToImage(image);
ImageView cimg = (ImageView)findViewById(R.id.imageView1);

//Now try setting dynamic image
cimg.setImageBitmap(myBitmap);

但是,当我这样做时,什么也没有显示。我在logcat中没有任何错误。我究竟做错了什么?

谢谢


问题答案:

我担心您只需要解码base64字符串即可获取图像字节,因此在您的

"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVI..."

字符串,您必须在之后获取数据data:image\/png;base64,,因此您仅获取图像字节,然后对其进行解码:

String imageDataBytes = completeImageData.substring(completeImageData.indexOf(",")+1);

InputStream stream = new ByteArrayInputStream(Base64.decode(imageDataBytes.getBytes(), Base64.DEFAULT));

这是一个代码,因此您可以了解其工作原理,但是,如果收到JSON对象,则应以 正确的 方式进行操作:

  • 将JSON字符串转换为JSON对象。
  • 提取data键下的字符串。
  • 确保以开头,image/png以便您知道是png图片。
  • 确保其中包含base64字符串,因此您知道必须对数据进行解码。
  • base64字符串后解码数据以获取图像。


 类似资料:
  • 问题内容: 可能是重复的,但我面临将图像转换成用于发送的问题。我已经尝试过此代码,但是它给了我错误的编码字符串。 输出: [B @ 677327b6 但我将同一张图像转换为许多在线编码器,它们都给出了正确的大Base64字符串。 编辑: 如何重复?我的重复的链接没有给我解决方案转换字符串我想要的。 我在这里想念什么? 问题答案: 问题是您要返回的调用将返回一个字节数组。因此,最后得到的是字节数组的

  • 问题内容: 我需要将base64编码字符串转换为ArrayBuffer。base64字符串是用户输入的字符串,它们将通过电子邮件进行复制和粘贴,因此在加载页面时它们不存在。我想在javascript中做到这一点,如果可能的话,不向服务器进行ajax调用。 这看起来不错,但我不知道如何使用代码。 有没有简单的方法(也许是本地方法)进行转换?谢谢 问题答案: 尝试这个:

  • 问题内容: 我将 图片获取 为base64字符串( ) ,下面是将转换为图片的函数, 现在,如果图像为png,则png库将创建图像,而jpg库将引发错误,反之亦然。 问题是当我上传png时效果很好,但是当我 上传jpg文件时 返回此错误 无效的JPEG格式:缺少SOI标记 输入为: 这可能有帮助 问题答案: 您将您的传递给,这开始消耗阅读器,只是发现输入不是有效的PNG,因此返回错误。 然后,将部

  • 有一种方法可以将输入流转换为字符串,并将其编码为base64,对吗? 在我的函数中,我得到了InputStream参数,需要将其插入到Oracle数据库表的BLOB字段中。 有办法做到吗? (我的数据库对象包含用于保存图像的字符串字段,但我找不到任何方法将InputStream转换为base 64格式的字符串。)

  • Im能够将转换为base64。但现在我正在尝试将其转换回并存储在中 编辑%1;首先感谢大家,我已经尝试了以下所有的解决方案,它们都起作用了。但是我有多个图像,如果中没有图像怎么办?

  • 我需要将base64编码字符串转换为ArrayBuffer。base64字符串是用户输入,它们将从电子邮件中复制和粘贴,因此当页面加载时它们不在那里。如果可能的话,我希望在javascript中完成此操作,而不需要对服务器进行ajax调用。 我发现这些链接很有趣,但它们对我没有帮助: