Comment convertir un grand Bitmap (photo prise avec l'appareil photo du téléphone) en une chaîne Base64?
android
bitmap
base64
android-bitmap
Pankaj Singh
la source
la source
Réponses:
utilisez la méthode suivante pour convertir le bitmap en tableau d'octets:
pour encoder base64 à partir d'un tableau d'octets, utilisez la méthode suivante
la source
J'ai une solution rapide. Créez simplement un fichier
ImageUtil.java
Usage:
ou
la source
Le problème avec la réponse de jeet est que vous chargez tous les octets de l'image dans un tableau d'octets, ce qui plantera probablement l'application dans les appareils bas de gamme. Au lieu de cela, j'écrirais d'abord l'image dans un fichier et je la lisais à l'aide de la classe Base64InputStream d'Apache . Ensuite, vous pouvez créer la chaîne Base64 directement à partir du InputStream de ce fichier. Il ressemblera à ceci:
Comme vous pouvez le voir, la solution ci-dessus fonctionne directement avec les flux à la place, évitant d'avoir à charger tous les octets dans une variable, rendant ainsi l'empreinte mémoire beaucoup plus faible et moins susceptible de planter dans les appareils bas de gamme. Il y a toujours le problème que placer la chaîne Base64 elle-même dans une variable String n'est pas une bonne idée, car, encore une fois, cela peut provoquer des erreurs OutOfMemory. Mais au moins, nous avons réduit de moitié la consommation de mémoire en éliminant le tableau d'octets.
Si vous souhaitez sauter l'étape d'écriture dans un fichier, vous devez convertir OutputStream en InputStream, ce qui n'est pas si simple à faire (vous devez utiliser PipedInputStream mais c'est un peu plus complexe car les deux flux doivent toujours être dans différents threads).
la source
Essayez ceci, mettez d'abord votre image à l'échelle à la largeur et à la hauteur requises, passez simplement votre bitmap d'origine, la largeur requise et la hauteur requise à la méthode suivante et obtenez une image bitmap mise à l'échelle en retour:
Par exemple: Bitmap scaledBitmap = getScaledBitmap (originalBitmap, 250, 350);
Maintenant, passez simplement votre bitmap mis à l'échelle à la méthode suivante et obtenez la chaîne base64 en retour:
Par exemple: String base64String = getBase64String (scaledBitmap);
Pour décoder la chaîne base64 en image bitmap:
la source
Toutes ces réponses sont inefficaces car elles décodent inutilement un bitmap, puis recompressent le bitmap. Lorsque vous prenez une photo sur Android, elle est stockée au format jpeg dans le fichier temporaire que vous spécifiez lorsque vous suivez les documents Android .
Ce que vous devez faire est de convertir directement ce fichier en une chaîne Base64. Voici comment faire cela en simple copier-coller (dans Kotlin). Notez que vous devez fermer base64FilterStream pour vraiment vider sa mémoire tampon interne.
En prime, la qualité de votre image devrait être légèrement améliorée, en raison du contournement de la recompression.
la source
Maintenant que la plupart des gens utilisent Kotlin au lieu de Java, voici le code de Kotlin pour convertir un bitmap en une chaîne base64.
la source
Utilisez ce code.
la source