Comment convertir une image en chaîne Base64?

Quelqu’un peut-il me dire le code pour transformer une image (maximum de 200 Ko) en base64 Ssortingng?

Je dois savoir comment faire avec Android, car je dois append la fonctionnalité pour télécharger des images sur un serveur distant dans mon application principale en les plaçant dans une ligne de la firebase database, sous forme de chaîne.

Je cherche dans google et dans StackOverflow mais je n’ai pas pu trouver des exemples faciles que je peux me permettre et aussi je trouve des exemples mais ils ne parlent pas de transformer en Ssortingng. Ensuite, je dois me transformer en chaîne pour télécharger par JSON sur mon serveur distant.

Vous pouvez utiliser la classe Android Base64:

Ssortingng encodedImage = Base64.encodeToSsortingng(byteArrayImage, Base64.DEFAULT); 

Vous devrez cependant convertir votre image en un tableau d’octets. Voici un exemple:

 Bitmap bm = BitmapFactory.decodeFile("/path/to/image.jpg"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object byte[] b = baos.toByteArray(); 

* Mettre à jour *

Si vous utilisez une ancienne bibliothèque SDK (parce que vous voulez qu’elle fonctionne sur les téléphones avec des versions plus anciennes du système d’exploitation), la classe Base64 ne sera pas intégrée (car elle est simplement sortie au niveau 8 de l’API).

Consultez cet article pour trouver une solution:

http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html

Au lieu d’utiliser Bitmap , vous pouvez également le faire via sortingvial InputStream . Eh bien, je ne suis pas sûr, mais je pense que c’est un peu efficace

 InputStream inputStream = new FileInputStream(fileName);//You can get an inputStream using any IO API byte[] bytes; byte[] buffer = new byte[8192]; int bytesRead; ByteArrayOutputStream output = new ByteArrayOutputStream(); try { while ((bytesRead = inputStream.read(buffer)) != -1) { output.write(buffer, 0, bytesRead); } } catch (IOException e) { e.printStackTrace(); } bytes = output.toByteArray(); Ssortingng encodedSsortingng = Base64.encodeToSsortingng(bytes, Base64.DEFAULT); 

Si vous avez besoin de base64 sur JSON, consultez Jackson : il prend explicitement en charge les données binarys en lecture / écriture en base64 au niveau inférieur (JsonParser, JsonGenerator) et au niveau de la liaison de données. Donc, vous pouvez simplement avoir des POJO avec des propriétés d’octet [], et le codage / décodage est automatiquement géré. Et assez efficacement aussi, cela devrait-il être important.

ce code préfet exécuté dans mon projet

 profile_image.buildDrawingCache(); Bitmap bmap = profile_image.getDrawingCache(); Ssortingng encodedImageData =getEncoded64ImageSsortingngFromBitmap(bmap); public Ssortingng getEncoded64ImageSsortingngFromBitmap(Bitmap bitmap) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.JPEG, 70, stream); byte[] byteFormat = stream.toByteArray(); // get the base 64 ssortingng Ssortingng imgSsortingng = Base64.encodeToSsortingng(byteFormat, Base64.NO_WRAP); return imgSsortingng; } 
 // put the image file path into this method public static Ssortingng getFileToByte(Ssortingng filePath){ Bitmap bmp = null; ByteArrayOutputStream bos = null; byte[] bt = null; Ssortingng encodeSsortingng = null; try{ bmp = BitmapFactory.decodeFile(filePath); bos = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos); bt = bos.toByteArray(); encodeSsortingng = Base64.encodeToSsortingng(bt, Base64.DEFAULT); }catch (Exception e){ e.printStackTrace(); } return encodeSsortingng; } 

Si vous faites cela sur Android , voici une aide copiée à partir du code source 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 ssortingng and can cause an OOM crash). private Ssortingng readFileAsBase64Ssortingng(Ssortingng 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.toSsortingng(); } 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) { } } 
 byte[] decodedSsortingng = Base64.decode(result.getBytes(), Base64.DEFAULT); 

Voici le pseudo-code qui peut vous aider:

 public Ssortingng getBase64FromFile(Ssortingng path) { Bitmap bmp = null; ByteArrayOutputStream baos = null; byte[] baat = null; Ssortingng encodeSsortingng = null; try { bmp = BitmapFactory.decodeFile(path); baos = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos); baat = baos.toByteArray(); encodeSsortingng = Base64.encodeToSsortingng(baat, Base64.DEFAULT); } catch (Exception e) { e.printStackTrace(); } return encodeSsortingng; } 

Utilisez ce code:

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