65 votes

Encoder et décoder un objet bitmap dans une chaîne base64 sous Android

Je veux encoder et décoder l'objet Bitmap dans la chaîne base64 . J'utilise l'API Android10,

J'ai essayé, sans succès, d'utiliser une méthode sous cette forme pour encoder un Bitmap .

 public static String encodeTobase64(Bitmap image) {
    Bitmap immagex=image;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    immagex.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] b = baos.toByteArray();
    String imageEncoded = Base64.encodeToString(b,Base64.DEFAULT);

    Log.e("LOOK", imageEncoded);
    return imageEncoded;
}

212voto

Roman Truba Points 1195
public static String encodeToBase64(Bitmap image, Bitmap.CompressFormat compressFormat, int quality)
{
    ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
    image.compress(compressFormat, quality, byteArrayOS);
    return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT);
}

public static Bitmap decodeBase64(String input)
{
    byte[] decodedBytes = Base64.decode(input, 0);
    return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
}

Exemple d'utilisation :

 String myBase64Image = encodeToBase64(myBitmap, Bitmap.CompressFormat.JPEG, 100);
Bitmap myBitmapAgain = decodeBase64(myBase64Image);

11voto

Vipul Shah Points 13233

J'espère que cela vous aidera

  Bitmap bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));

(si vous faites référence à l'URI pour construire le bitmap) OU

 Resources resources = this.getResources();
Bitmap bitmap= BitmapFactory.decodeResource(resources , R.drawable.logo);

(si vous faites référence à drawable pour construire un bitmap)

Ensuite, encodez-le

  ByteArrayOutputStream stream = new ByteArrayOutputStream();  
 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
 byte[] image = stream.toByteArray();
 String encodedImage = Base64.encode(image, Base64.DEFAULT);

Pour Decoding Logic sera exactement l'inverse de l'encodage

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

1voto

Hanisha Points 119

Pour encoder la bimap en image :

  ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 80, byteArrayOutputStream);
   byte[] imageBytes = byteArrayOutputStream.toByteArray();
   String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
    Log.d("bytearray", String.valueOf(byteArrayOutputStream.toByteArray()));
    Log.d("encodedimage",encodedImage);

0voto

tigerZ Points 109

notez que si vous obtenez la chaîne base64 d'un autre processus comme JSInterface, la chaîne commencera par l'en-tête de la base64 comme 'data:image/png;base64', vous devez la couper si vous utilisez BitmapFactory.decodeByteArray pour la décoder.

 String dataStr = thumb.startsWith("data:image") ? thumb.substring(thumb.indexOf(',') + 1) : thumb;
byte[] decodedString = Base64.decode(dataStr, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X