¿Cómo convierto un mapa de bits grande (foto tomada con la cámara del teléfono) en una cadena Base64?
android
bitmap
base64
android-bitmap
Pankaj Singh
fuente
fuente
Respuestas:
use el siguiente método para convertir el mapa de bits en una matriz de bytes:
para codificar base64 desde la matriz de bytes, utilice el siguiente método
fuente
Tengo una solución rápida Solo crea un archivo
ImageUtil.java
Uso:
o
fuente
El problema con la respuesta de jeet es que carga todos los bytes de la imagen en una matriz de bytes, lo que probablemente bloqueará la aplicación en dispositivos de gama baja. En cambio, primero escribiría la imagen en un archivo y la leería usando la clase Base64InputStream de Apache . Luego puede crear la cadena Base64 directamente desde InputStream de ese archivo. Se verá así:
Como puede ver, la solución anterior funciona directamente con secuencias, evitando la necesidad de cargar todos los bytes en una variable, por lo tanto, la huella de memoria es mucho menor y es menos probable que se bloquee en dispositivos de gama baja. Todavía existe el problema de que colocar la cadena Base64 en una variable de cadena no es una buena idea, porque, nuevamente, puede causar errores de OutOfMemory. Pero al menos hemos reducido el consumo de memoria a la mitad al eliminar la matriz de bytes.
Si desea omitir el paso de escribir en un archivo, debe convertir el OutputStream en un InputStream, que no es tan sencillo de hacer (debe usar PipedInputStream pero eso es un poco más complejo ya que los dos flujos siempre deben estar en diferentes hilos).
fuente
Pruebe esto, primero escale su imagen al ancho y la altura requeridos, simplemente pase su mapa de bits original, el ancho requerido y la altura requerida al siguiente método y obtenga un mapa de bits escalado a cambio:
Por ejemplo: Bitmap scaledBitmap = getScaledBitmap (originalBitmap, 250, 350);
Ahora simplemente pase su mapa de bits escalado al siguiente método y obtenga una cadena base64 a cambio:
Por ejemplo: String base64String = getBase64String (scaledBitmap);
Para decodificar la cadena base64 de nuevo a la imagen de mapa de bits:
fuente
Todas estas respuestas son ineficientes ya que decodifican innecesariamente un mapa de bits y luego vuelven a comprimir el mapa de bits. Cuando toma una foto en Android, se almacena como un archivo JPEG en el archivo temporal que especifica cuando sigue los documentos de Android .
Lo que debe hacer es convertir directamente ese archivo a una cadena Base64. Aquí se explica cómo hacerlo fácilmente en copiar y pegar (en Kotlin). Tenga en cuenta que debe cerrar el base64FilterStream para vaciar realmente su búfer interno.
Como beneficio adicional, la calidad de su imagen debería mejorarse ligeramente, sin pasar por la compresión.
fuente
Ahora que la mayoría de la gente usa Kotlin en lugar de Java, aquí está el código en Kotlin para convertir un mapa de bits en una cadena base64.
fuente
Usa este código ...
fuente