J'ai une chaîne Base64 qui représente une image BitMap.
Je dois à nouveau transformer cette chaîne en une image BitMap pour l'utiliser sur un ImageView dans mon application Android
Comment faire?
C'est le code que j'utilise pour transformer l'image en chaîne 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);
String cleanImage = base64Image.replace("data:image/png;base64,", "").replace("data:image/jpeg;base64,","");
À tous ceux qui sont toujours intéressés par cette question: Si: 1-decodeByteArray renvoie null 2-Base64.decode lève une exception bad-base64
Voici la solution: -Vous devez considérer que la valeur qui vous est envoyée par l'API est encodée en Base64 et doit être décodée en premier afin de la convertir en objet Bitmap! - Jetez un œil à votre chaîne encodée en Base64, si elle commence par
Le Base64.decode ne pourra pas le décoder, il doit donc être supprimé de votre chaîne encodée:
final String encodedString = "data:image/jpg;base64, ...."; final String pureBase64Encoded = encodedString.substring(encodedString.indexOf(",") + 1);
Maintenant, l' objet pureBase64Encoded est prêt à être décodé:
final byte[] decodedBytes = Base64.decode(pureBase64Encoded, Base64.DEFAULT);
Maintenant, utilisez simplement la ligne ci-dessous pour transformer cela en un objet Bitmap ! :
Ou si vous utilisez la grande bibliothèque Glide :
Glide.with(CaptchaFragment.this).load(decodedBytes).crossFade().fitCenter().into(mCatpchaImageView);
Cela devrait faire l'affaire! Il a gaspillé un jour là-dessus et est venu à cette solution!
Remarque : Si vous obtenez toujours une erreur bad-base64, pensez à d'autres indicateurs Base64.decode comme Base64.URL_SAFE et ainsi de suite
la source
C'est un fil très ancien mais pensé pour partager cette réponse car il a fallu beaucoup de temps de développement pour gérer le
NULL
retour deBitmapFactory.decodeByteArray()
@Anirudh.Si la
encodedImage
chaîne est uneJSON
réponse, utilisez simplement à laBase64.URL_SAFE
place deBase64.DEAULT
byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE); Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
la source
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 façon
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
la source
J'ai trouvé cette solution simple
Pour convertir du bitmap en Base64, utilisez cette méthode.
private String convertBitmapToBase64(Bitmap bitmap) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); byte[] byteArray = byteArrayOutputStream .toByteArray(); return Base64.encodeToString(byteArray, Base64.DEFAULT); }
Pour convertir de Base64 en bitmap OU revenir en arrière.
private Bitmap convertBase64ToBitmap(String b64) { byte[] imageAsBytes = Base64.decode(b64.getBytes(), Base64.DEFAULT); return BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length); }
la source
Ceci est un excellent échantillon:
String base64String = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAA..."; String base64Image = base64String.split(",")[1]; byte[] decodedString = Base64.decode(base64Image, Base64.DEFAULT); Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); imageView.setImageBitmap(decodedByte);
Échantillon trouvé sur: https://freakycoder.com/android-notes-44-how-to-convert-base64-string-to-bitmap-53f98d5e57af
C'est le seul code qui a fonctionné pour moi dans le passé.
la source