Comment convertir une chaîne Base64 en une image BitMap pour l’afficher dans un ImageView?

J’ai une chaîne Base64 qui représente une image BitMap.

Je dois transformer cette chaîne en une image BitMap pour l’utiliser sur une imageView dans mon application Android

Comment faire?

C’est le code que j’utilise pour transformer l’image en base64 Ssortingng:

//proceso de transformar la imagen BitMap en un Ssortingng: //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(); //Ssortingng encodedImage = Base64.encode(b, Base64.DEFAULT); encodedImage = Base64.encodeBytes(b); 

Vous pouvez simplement restaurer votre code en utilisant d’autres méthodes intégrées.

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

Pour toute personne toujours intéressée par cette question: Si: 1-decodeByteArray retourne null, 2-Base64.decode émet une exception bad-base64

Voici la solution: -Vous devriez considérer que la valeur qui vous est envoyée depuis l’API est Base64 Encoded et devrait être décodée en premier afin de la convertir en object Bitmap! – Jetez un oeil à votre chaîne encodée en Base64, si elle commence par

données: image / jpg; base64

Le Base64.decode ne pourra pas le décoder, il doit donc être retiré de votre Ssortingng encodé:

 final Ssortingng encodedSsortingng = "data:image/jpg;base64, ...."; final Ssortingng pureBase64Encoded = encodedSsortingng.subssortingng(encodedSsortingng.indexOf(",") + 1); 

L’ object pureBase64Encoded est maintenant prêt à être décodé:

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

Maintenant, utilisez simplement la ligne ci-dessous pour en faire un object Bitmap ! :

Bitmap decodedBitmap = BitmapFactory.decodeByteArray (décodéBytes, 0, décodéBytes.length);

Ou si vous utilisez la grande bibliothèque Glide :

 Glide.with(CaptchaFragment.this).load(decodedBytes).crossFade().fitCenter().into(mCatpchaImageView); 

Cela devrait faire le travail! Cela a gaspillé un jour là-dessus et est venu à cette solution!

Remarque : Si vous obtenez toujours une erreur bad-base64, envisagez d’autres indicateurs Base64.decode tels que Base64.URL_SAFE, etc.

Il s’agit d’un très vieux fil de discussion, mais nous avons pensé à partager cette réponse car il a fallu beaucoup de temps de développement pour gérer le retour NULL de BitmapFactory.decodeByteArray() comme l’avait fait @Anirudh.

Si la chaîne encodedImage est une réponse JSON , utilisez simplement Base64.URL_SAFE au lieu de Base64.DEAULT

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

Pour vérifier en ligne, vous pouvez utiliser

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

Vous pouvez convertir une chaîne en image de cette manière

 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 ssortingng ByteArrayOutputStream baos = new ByteArrayOutputStream(); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] imageBytes = baos.toByteArray(); Ssortingng imageSsortingng = Base64.encodeToSsortingng(imageBytes, Base64.DEFAULT); //decode base64 ssortingng to image imageBytes = Base64.decode(imageSsortingng, Base64.DEFAULT); Bitmap decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); image.setImageBitmap(decodedImage); } } 

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