Cómo convertir una imagen en una cadena de Base64?
¿Puede alguien decirme el código para transformar una imagen (máximo de 200KB) en la cadena de Base64?
Necesito saber cómo hacerlo con Android, porque tengo que añadir la funcionalidad para subir imágenes a un servidor remoto en mi aplicación principal ponerlos en una fila de la base de datos, como una cadena.
- Decodificación y Codificación. Diferentes implementaciones de la clase Base64 en android.util. * Y java.util. *?
- Cómo convertir un archivo a base 64 (como .pdf, .txt) en Android?
- Android BitmapFactory devolver null en Base64 decodificó byte matriz
- Cómo convertir Bitmap a Base64 String
- Cómo decodificar y codificar la imagen base64 sin perder la calidad y el tamaño
Estoy buscando en google y en StackOverflow, pero no pude encontrar ejemplos fáciles que puedo pagar y también encontrar algunos ejemplos, pero no están hablando de transformar en String. Entonces necesito transformar en la secuencia para cargar por JSON a mi servidor alejado.
- Convertir matriz de bytes a Base64 String en android
- Base 64 codificar y descodificar código de ejemplo
- descodificador base64 en android en API nivel 7
- Cómo cargar la imagen en base64 en el servidor
- Archivo de Android a Base64 utilizando streaming a veces se pierde 2 bytes
- Enviar la imagen de Base64 desde Android con JSON a php webservice, decodificar, guardar en SQL
- Cómo descodificar la cadena base64 y convertirla en pdf / jpg y guardarla en almacenamiento
- Codificador y decodificador Base64
Puede utilizar la clase Base64 Android:
String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
Tendrás que convertir tu imagen en una matriz de bytes sin embargo. He aquí un ejemplo:
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();
* Actualización *
Si está utilizando una biblioteca de SDK más antigua (porque quiere que funcione en teléfonos con versiones anteriores del sistema operativo) no tendrá la clase Base64 empacada (ya que sólo salió en el nivel 8 de API, también conocida como versión 2.2).
Compruebe este artículo para un work-around:
http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html
En lugar de utilizar Bitmap
, también puede hacer esto a través de trivial InputStream
. Bueno, no estoy seguro, pero creo que es un poco eficiente
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(); String encodedString = Base64.encodeToString(bytes, Base64.DEFAULT);
Si necesita base64 sobre JSON, echa un vistazo a Jackson : tiene soporte explícito para lectura / escritura de datos binarios como base64 en nivel bajo (JsonParser, JsonGenerator) y nivel de enlace de datos. Así que sólo puede tener POJOs con propiedades byte [], y la codificación / decodificación se gestiona automáticamente. Y bastante eficiente también, debería importar.
Este prefecto de código se ejecuta en mi proyecto
profile_image.buildDrawingCache(); Bitmap bmap = profile_image.getDrawingCache(); String encodedImageData =getEncoded64ImageStringFromBitmap(bmap); public String getEncoded64ImageStringFromBitmap(Bitmap bitmap) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.JPEG, 70, stream); byte[] byteFormat = stream.toByteArray(); // get the base 64 string String imgString = Base64.encodeToString(byteFormat, Base64.NO_WRAP); return imgString; }
Si estás haciendo esto en Android , he aquí un ayudante copiado de la base de código 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) { } }
public static String getFileToByte(String path){ Bitmap bm = null; ByteArrayOutputStream baos = null; byte[] b = null; String encodeString = null; try{ bm = BitmapFactory.decodeFile(path); baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); b = baos.toByteArray(); encodeString = Base64.encodeToString(b, Base64.DEFAULT); }catch (Exception e){ e.printStackTrace(); } return encodeString; }
byte[] decodedString = Base64.decode(result.getBytes(), Base64.DEFAULT);
Utilice este código:
byte[ ] decodedString = Base64.decode(Base64String.getBytes(), Base64.DEFAULT); Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
- Iniciar la aplicación sms con una intención
- ¿Cómo se muestra el teclado numérico en un EditText en android?