Cómo convertir imágenes en Android a formato Base64

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;
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_39312146/article/details/129195140
Recomendado
Clasificación