Conversão de imagem para Base64

Conversão de imagem para Base64

1. Visão geral

Neste tutorial rápido, vamos cobrir como codificar o arquivo de imagem para um Base64String e, em seguida, decodificá-lo para recuperar a imagem original usando o Apache Common IO e os recursos nativos Base64 do Java 8.

Esta operação pode ser aplicada a quaisquer arquivos binários ou matrizes binárias. É útil quando precisamos transferir conteúdo binário no formato JSON, como do aplicativo móvel para o endpoint REST.

Para obter mais informações sobre a conversão de Base64, verifiquethis article here.

2. Dependência do Maven

Vamos adicionar as seguintes dependências ao arquivopom.xml:


    commons-io
    commons-io
    2.6

Você pode encontrar a versão mais recente do Apache Commons IO emMaven Central.

3. Converter arquivo de imagem em Base64String

Em primeiro lugar, vamos ler o conteúdo do arquivo em uma matriz de bytes e usar a classe Java 8Base64 para codificá-lo:

byte[] fileContent = FileUtils.readFileToByteArray(new File(filePath));
String encodedString = Base64.getEncoder().encodeToString(fileContent);

OencodedString é umString de caracteres no conjunto deA-Za-z0-9+/, e o decodificador rejeita quaisquer caracteres fora desse conjunto.

4. Converter Base64String em arquivo de imagem

Agora que temos um Base64String, vamos decodificá-lo de volta para o conteúdo binário e gravar em um novo arquivo:

byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
FileUtils.writeByteArrayToFile(new File(outputFileName), decodedBytes);

5. Testando nosso código

Por fim, podemos verificar se o código está funcionando corretamente lendo um arquivo, codificando-o para Base64Stringe decodificando-o de volta para um novo arquivo:

public class FileToBase64StringConversionUnitTest {

    private String inputFilePath = "test_image.jpg";
    private String outputFilePath = "test_image_copy.jpg";

    @Test
    public void fileToBase64StringConversion() throws IOException {
        // load file from /src/test/resources
        ClassLoader classLoader = getClass().getClassLoader();
        File inputFile = new File(classLoader
          .getResource(inputFilePath)
          .getFile());

        byte[] fileContent = FileUtils.readFileToByteArray(inputFile);
        String encodedString = Base64
          .getEncoder()
          .encodeToString(fileContent);

        // create output file
        File outputFile = new File(inputFile
          .getParentFile()
          .getAbsolutePath() + File.pathSeparator + outputFilePath);

        // decode the string and write to file
        byte[] decodedBytes = Base64
          .getDecoder()
          .decode(encodedString);
        FileUtils.writeByteArrayToFile(outputFile, decodedBytes);

        assertTrue(FileUtils.contentEquals(inputFile, outputFile));
    }
}

6. Conclusão

Este artigo direto explica o básico da codificação do conteúdo de qualquer arquivo em Base64String, decodificação de Base64String em uma matriz de bytes e salvá-lo em um arquivo usando Apache Common IO e Java 8 recursos.

Como sempre, trechos de código podem ser encontradosover on GitHub.