154 votes

Comment puis-je convertir une image en une chaîne de caractères Base64 ?

Quel est le code pour transformer une image (maximum de 200 Ko) en une chaîne de caractères Base64 ?

J'ai besoin de savoir comment le faire avec Android, car je dois ajouter la fonctionnalité de téléchargement d'images vers un serveur distant dans mon application principale, en les plaçant dans une ligne de la base de données, sous forme de chaîne.

Je cherche dans Google et dans Stack Overflow, mais je n'ai pas trouvé d'exemples faciles que je puisse me permettre et j'ai aussi trouvé quelques exemples, mais ils ne parlent pas de transformer en String. Alors j'ai besoin de transformer en une chaîne pour télécharger par JSON à mon serveur distant.

3voto

Martin Konicek Points 7999

Si vous faites ça sur Android voici une aide copiée de l'application Base de code React Native :

import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import android.util.Base64;
import android.util.Base64OutputStream;
import android.util.Log;

// You probably don't want to do this with large files
// (will allocate a large string and can cause an OOM crash).
private String readFileAsBase64String(String path) {
  try {
    InputStream is = new FileInputStream(path);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Base64OutputStream b64os = new Base64OutputStream(baos, Base64.DEFAULT);
    byte[] buffer = new byte[8192];
    int bytesRead;
    try {
      while ((bytesRead = is.read(buffer)) > -1) {
        b64os.write(buffer, 0, bytesRead);
      }
      return baos.toString();
    } catch (IOException e) {
      Log.e(TAG, "Cannot read file " + path, e);
      // Or throw if you prefer
      return "";
    } finally {
      closeQuietly(is);
      closeQuietly(b64os); // This also closes baos
    }
  } catch (FileNotFoundException e) {
    Log.e(TAG, "File not found " + path, e);
    // Or throw if you prefer
    return "";
  }
}

private static void closeQuietly(Closeable closeable) {
  try {
    closeable.close();
  } catch (IOException e) {
  }
}

3voto

Sam Points 289

Voici le code de codage et de décodage en Kotlin :

 fun encode(imageUri: Uri): String {
    val input = activity.getContentResolver().openInputStream(imageUri)
    val image = BitmapFactory.decodeStream(input , null, null)

    // Encode image to base64 string
    val baos = ByteArrayOutputStream()
    image.compress(Bitmap.CompressFormat.JPEG, 100, baos)
    var imageBytes = baos.toByteArray()
    val imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT)
    return imageString
}

fun decode(imageString: String) {

    // Decode base64 string to image
    val imageBytes = Base64.decode(imageString, Base64.DEFAULT)
    val decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)

    imageview.setImageBitmap(decodedImage)
}

1voto

Aftab Alam Points 101

Convertissez une image en chaîne de caractères Base64 dans Android :

ByteArrayOutputStream baos = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.yourimage);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);

1voto

Alessi 42 Points 859

Pour ceux qui recherchent une méthode efficace pour convertir un fichier image en une chaîne de caractères Base64 sans compression ni conversion préalable du fichier en bitmap, vous pouvez utiliser la méthode suivante encoder le fichier en base64

val base64EncodedImage = FileInputStream(imageItem.localSrc).use {inputStream - >
    ByteArrayOutputStream().use {outputStream - >
            Base64OutputStream(outputStream, Base64.DEFAULT).use {
                base64FilterStream - >
                    inputStream.copyTo(base64FilterStream)
                base64FilterStream.flush()
                outputStream.toString()
            }
      }
}

J'espère que cela vous aidera !

1voto

Gustavo Ross Points 136

Version de Kotlin :

fun File.toBase64(): String? {
 val result: String?
 inputStream().use { inputStream ->
    val sourceBytes = inputStream.readBytes()
    result = Base64.encodeToString(sourceBytes, Base64.DEFAULT)
 }

 return result
}

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