Как преобразовать строку Base64 в растровое изображение, чтобы показать ее в ImageView?

У меня есть строка Base64, которая представляет растровое изображение.

Мне нужно снова преобразовать эту строку в растровое изображение, чтобы использовать ее в ImageView в моем приложении для Android

Как это сделать?

Это код, который я использую для преобразования изображения в строку base64:

//proceso de transformar la imagen BitMap en un String:
//android:src="c:logo.png"
Resources r = this.getResources();
Bitmap bm = BitmapFactory.decodeResource(r, R.drawable.logo);
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
bm.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object   
byte[] b = baos.toByteArray();
//String encodedImage = Base64.encode(b, Base64.DEFAULT);
encodedImage = Base64.encodeBytes(b);

4 ответов


вы можете просто вернуть свой код, используя некоторые другие встроенные методы.

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

для всех, кто все еще заинтересован в этом вопросе: Если: 1-decodeByteArray возвращает null 2-в base64.декодирование выдает bad-Base64 Exception

вот решение: - Вы должны учитывать, что значение, отправленное вам из API, кодируется Base64 и должно быть декодировано сначала, чтобы привести его к Растровому объекту! - Взгляните на кодированную строку Base64, если она начинается с

данные: изображение / jpg; base64

В Формате Base64.декодировать не удастся декодируйте его, поэтому он должен быть удален из вашей закодированной строки:

final String encodedString = "data:image/jpg;base64, ....";                        
final String pureBase64Encoded = encodedString.substring(encodedString.indexOf(",")  + 1);

Теперь pureBase64Encoded объект готов к декодированию:

final byte[] decodedBytes = Base64.decode(pureBase64Encoded, Base64.DEFAULT);

Теперь просто используйте строку ниже, чтобы превратить это в точечный


это очень старый поток, но думал поделиться этим ответом, так как потребовалось много времени на разработку, чтобы управлять NULL возвращение BitmapFactory.decodeByteArray() как @Anirudh столкнулся.

если encodedImage строка JSON ответ, просто использовать Base64.URL_SAFE вместо Base64.DEAULT

byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

чтобы проверить онлайн вы можете использовать

http://codebeautify.org/base64-to-image-converter

вы можете преобразовать строку в изображение следующим образом

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.widget.ImageView;

import java.io.ByteArrayOutputStream;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        //encode image to base64 string
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imageBytes = baos.toByteArray();
        String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);

        //decode base64 string to image
        imageBytes = Base64.decode(imageString, Base64.DEFAULT);
        Bitmap decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
        image.setImageBitmap(decodedImage);
    }
}

http://www.thecrazyprogrammer.com/2016/10/android-convert-image-base64-string-base64-string-image.html