Как конвертировать изображения на Android в формат Base64

Предисловие:

Данные изображения клиента мобильного телефона Android загружаются на сервер для хранения.Сначала данные изображения клиента необходимо преобразовать в формат Base64, а затем их можно загрузить на сервер через сеть.

Есть два способа добиться этого:

  • Позвольте клиенту загрузить изображение на сервер и сообщить серверу сетевой URL-адрес изображения.

  • Преобразуйте изображение в кодировку Base64 и передайте его на сервер, а сервер сгенерирует изображение после декодирования строки Base64.

Эта статья посвящена преобразованию изображений в Base64.

Android предоставляет класс android.util.Base64 в пакете util.

Этот класс предоставляет четыре метода кодирования, а именно:

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)

Обеспечивает три декодирования

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)

Мы обнаружили, что каждый из четырех методов кодирования имеет параметр flags, который является флагом кодирования или стандартом кодирования.

Стандарты кодирования следующие:

  • CRLF

Символ новой строки в стиле Win означает использование пары CR и LF в качестве конца строки вместо LF в стиле Unix.
CRLF — это сокращение от Carriage-Return Line-Feed, что означает возврат каретки (\r) и перевод строки (\n).
То есть идентификатор конца строки в стиле Windows — \r\n, а идентификатор конца строки в стиле Unix — \n.
  • ПО УМОЛЧАНИЮ

Этот параметр используется по умолчанию, используйте метод по умолчанию для шифрования
  • NO_PADDING

Этот параметр позволяет опустить «=» в конце зашифрованной строки.
  • NO_WRAP

Этот параметр означает отсутствие всех разрывов строк (после установки CRLF бесполезен)
  • URL_SAFE

Этот параметр означает, что символы, имеющие особое значение для URL-адресов и имен файлов, не используются в качестве зашифрованных символов при шифровании, в частности, замена + и / на - и _.
  • NO_CLOSE

Обычно используемый с `Base64OutputStream`, это флаг, передаваемый `Base64OutputStream`, чтобы указать, что он не должен закрывать переносимый поток вывода.

Код для преобразования изображения в Base64 выглядит следующим образом:

/**
 * 将图片转换成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;
}

Код преобразования изображения Base64 выглядит следующим образом:

/**
 * 将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;
    }
}

Guess you like

Origin blog.csdn.net/qq_39312146/article/details/129195140