Как преобразовать двоичный файл base64 в растровое изображение в Android? - PullRequest
0 голосов
/ 06 июля 2019

У меня есть двоичная строка 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, ................., 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,44,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);

Это JSON, который я получаю от mongoDB:

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

Ответы [ 4 ]

0 голосов
/ 06 июля 2019
byte[] blob = c.getBlob(1); 
 //I do this to see if the cursor is empty

 if(blob != null) { 

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

    } 
 else { 
      mImage.setImageResource(R.drawable.pear); 
    }  
0 голосов
/ 06 июля 2019

Хорошо, после небольшого погружения, причина не сработала, потому что здесь

byte[] decodedString = thirdParse.getBytes();

Вы не берете байтовый массив из строки, которую вы на самом деле конвертируете thirdParse в байтовый массив, поэтому если вы получите, например, thirdparse = [1,2,3], когда вы используете getBytes () it преобразует этот массив в байты, и вам нужно напрямую принимать значения, ничего не преобразовывая, так что вот что я сделал

сначала я создал метод, который вы бы дали третьемуПарсу

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);
0 голосов
/ 06 июля 2019

Я просто изменил свой тип сохранения изображения с буфера на строку в соединении mongoDB, а затем изменил кодировку на строку base64.

0 голосов
/ 06 июля 2019

Попробуйте это:

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