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

use*_*342 19 java android image

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

JSON字符串如下所示:

"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVI..."
Run Code Online (Sandbox Code Playgroud)

注意:我用...截断了字符串

我有一个函数(我认为)将字符串转换为图像.我这样做了吗?

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

然后我尝试在我的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);
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,什么都没有出现.我没有在logcat中得到任何错误.我究竟做错了什么?

谢谢

Jor*_*lez 46

我担心你只需解码base64字符串来获取图像字节,所以在你的

"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVI..."
Run Code Online (Sandbox Code Playgroud)

字符串,你必须得到之后的数据data:image\/png;base64,,所以你只得到图像字节,然后解码它们:

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

InputStream stream = new ByteArrayInputStream(Base64.decode(imageDataBytes.getBytes(), Base64.DEFAULT));
Run Code Online (Sandbox Code Playgroud)

这是一个代码,所以你了解它是如何工作的,但如果你收到一个JSON对象,它应该以正确的方式完成:

  • 将JSON字符串转换为JSON对象.
  • datakey 下提取String .
  • 确保image/png以您知道的png图像开头.
  • 确保包含base64字符串,因此您知道必须解码数据.
  • base64字符串后解码数据以获取图像.


Wan*_*ker 5

InputStream stream = new ByteArrayInputStream(image.getBytes());
Run Code Online (Sandbox Code Playgroud)

应该改为

InputStream stream = new ByteArrayInputStream(Base64.decode(image.getBytes(), Base64.DEFAULT));
Run Code Online (Sandbox Code Playgroud)

有关如何进行 Base64 解码的详细信息,请参阅http://developer.android.com/reference/android/util/Base64.html 。

免责声明:我没有检查语法,但你应该这样做。