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.