Prefacio:
Los datos de imagen del cliente de teléfono móvil Android se cargan en el servidor para su almacenamiento. Primero, los datos de imagen del cliente deben convertirse al formato Base64 y luego se pueden cargar en el servidor a través de la red.
Hay dos maneras de lograr esto:
Deje que el cliente cargue la imagen en el servidor y dígale al servidor la URL de red de la imagen
Convierta la imagen a la codificación Base64 y pásela al servidor, y el servidor genera una imagen después de decodificar la cadena Base64.
Este artículo se centra en la conversión de imágenes a Base64
Android proporciona la clase android.util.Base64 en el paquete util
Esta clase proporciona cuatro métodos de codificación, a saber:
public static byte[] encode(byte[] input, int flags)
public static byte[] encode(byte[] input, int offset, int len, int flags)
public static String encodeToString(byte[] input, int flags)
public static String encodeToString(byte[] input, int offset, int len, int flags)
Proporciona tres decodificación
public static byte[] decode(String str, int flags)
public static byte[] decode(byte[] input, int flags)
public static byte[] decode(byte[] input, int offset, int len, int flags)
Descubrimos que cada uno de los cuatro métodos de codificación tiene un parámetro de banderas, que es la bandera de codificación o el estándar de codificación.
Los estándares de codificación son los siguientes:
CRLF
El carácter de nueva línea de estilo Win significa usar el par de CR y LF como el final de una línea en lugar del LF de estilo Unix.
CRLF es la abreviatura de Carriage-Return Line-Feed, que significa retorno de carro (\r) y salto de línea (\n).
Es decir, el identificador de fin de línea de estilo Windows es \r\n, y el identificador de fin de línea de estilo Unix es \n.
POR DEFECTO
Este parámetro es el predeterminado, utilice el método predeterminado para cifrar
SIN_RELLENO
Este parámetro es para omitir el "=" al final de la cadena cifrada
NO_ENVOLVER
Este parámetro significa omitir todos los saltos de línea (CRLF es inútil después de la configuración)
URL_SAFE
Este parámetro significa que los caracteres con un significado especial para las direcciones URL y los nombres de archivo no se utilizan como caracteres cifrados al cifrar, reemplazando específicamente + y / con - y _.
NO CERRAR
Normalmente se usa con `Base64OutputStream`, es el indicador que se pasa a `Base64OutputStream` para indicar que no debe cerrar el flujo de salida que se está ajustando.
El código para convertir la imagen a Base64 es el siguiente:
/**
* 将图片转换成Base64编码的字符串
*/
public static String imageToBase64(String path){
if(TextUtils.isEmpty(path)){
return null;
}
InputStream is = null;
byte[] data = null;
String result = null;
try{
is = new FileInputStream(path);
//创建一个字符流大小的数组。
data = new byte[is.available()];
//写入数组
is.read(data);
//用默认的编码格式进行编码
result = Base64.encodeToString(data,Base64.NO_CLOSE);
}catch (Exception e){
e.printStackTrace();
}finally {
if(null !=is){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
El código de conversión de imagen Base64 es el siguiente:
/**
* 将Base64编码转换为图片
* @param base64Str
* @param path
* @return true
*/
public static boolean base64ToFile(String base64Str,String path) {
byte[] data = Base64.decode(base64Str,Base64.NO_WRAP);
for (int i = 0; i < data.length; i++) {
if(data[i] < 0){
//调整异常数据
data[i] += 256;
}
}
OutputStream os = null;
try {
os = new FileOutputStream(path);
os.write(data);
os.flush();
os.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}catch (IOException e){
e.printStackTrace();
return false;
}
}