如何在Android中将base64二进制转换为位图?

时间:2019-07-06 06:39:14

标签: android image binary base64

我有一个base64二进制字符串,该字符串是从mongoDB中的图像获取的。例如:

[255,216,255,224,0,16,74,70,73,70,0,1,1,1,0,96,0,96,0,0,255,219,0,67,0,8,6,6, 7,6,5,8,7,7,7,9,9,8,10,12,20,13,12,11,11,12,25,18,19,15,20,29,26, 31,30,29,26,28,28,32,36,46,39,32,34,44,35,28,28,40,55,41,44,48,49,52,52,52, 31,39,57,61,56,50,60,46,51,52,50,255,219,0,67,1,9,9,9,12,11,12,24,13,13,24,50, 33,28,33,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, ................................,253,246,255,0,190,141,20,80,2,249,142,57,222,223,153,160,200,231,146,237,159,173,20,80,1,230,63,247,219,254,250,52,155,223,251,237,255,0,125,26,40,160,4,103,102,108,177 79,82,78,73,162,138,40,3,255,217]

在Android中,如何将该字符串转换为位图?该代码不起作用:

byte[] decodedString = {Base64 Binary Here}.getBytes();
Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

这是我的完整代码:

// JSON Parser
JsonParser jsonParser = new JsonParser();
JsonArray jsonArray = (JsonArray) jsonParser.parse(json_result);

String thirdParse = null;

for (int i = 0; i < jsonArray.size(); i++) {
    JsonObject object = (JsonObject) jsonArray.get(i);
    JsonObject firstParse = (JsonObject) object.get("img");
    JsonObject secondParse = (JsonObject) firstParse.get("data");
    thirdParse = secondParse.get("data").toString();
}

byte[] decodedString = thirdParse.getBytes();
Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

imageView.setImageBitmap(bmp);

这是我从mongoDB获得的JSON:

[{"img":{"data":{"type":"Buffer","data":[(base64 binary data)]}}}]

4 个答案:

答案 0 :(得分:0)

尝试一下:

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

答案 1 :(得分:0)

好的,经过一番潜入,它没用的原因是因为在这里

byte[] decodedString = thirdParse.getBytes();

您不是从字符串中获取字节数组,而是实际上将thirdParse转换为字节数组,因此,例如,当您使用 getBytes()时,获得thirdparse = [1,2,3]它将把这个数组转换为字节,而你想要的是直接取值本身而不进行任何转换,所以这就是我所做的

首先,我创建了一个方法,可以将ThirdParse赋予

public byte[] convertToByteArray(String stringContainingByteArray){
 String[] l =    stringContainingByteArray.replace("[","").replace("]","").split(",");
 byte [] byteArray = new byte[l.length];
 for (int i=0;i<l.length;i++){
     byteArray[i]=Byte.parseByte(l[i]);
 }
    return byteArray;
}

,您将只向它发送thirdParse字符串,并检索一个byteArray,将其按以下方式传递给BitmapFactory

    byte[] byteArray = convertToByteArray(stringContainingByteArray)
    Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
    imageView.setImageBitmap(bmp)

为简单起见,没有方法的整个代码如下

// JSON Parser
    JsonParser jsonParser = new JsonParser();
    JsonArray jsonArray = (JsonArray) jsonParser.parse(json_result);

    String thirdParse = null;

    for (int i = 0; i < jsonArray.size(); i++) {
        JsonObject object = (JsonObject) jsonArray.get(i);
        JsonObject firstParse = (JsonObject) object.get("img");
        JsonObject secondParse = (JsonObject) firstParse.get("data");
        thirdParse = secondParse.get("data").toString();
    }
    String[] l =    thirdParse.replace("[","").replace("]","").split(",");
    byte [] decodedString = new byte[l.length];
    for (int i=0;i<l.length;i++){
        decodedString[i]=Byte.parseByte(l[i]);
    }
    Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

    imageView.setImageBitmap(bmp);

答案 2 :(得分:0)

我刚刚在mongoDB连接中将图像保存类型从Buffer更改为String,然后将编码更改为base64 String。

答案 3 :(得分:0)

  def xxx: Any = macro Macro.exec

  def exec(c: blackbox.Context): c.Tree = {
    import c.universe._
    c.typecheck(
      c.parse(
        "org.scalatest.junit.MyRunListener"
      ),
      silent = true
    )
  }