Codifica e decodifica di un'immagine in Base64

DOMANDA:

Come si effettua la codifica in Base64 di un'immagine in Java?


RISPOSTA:

Differentemente da quanto visto per la codifica Base64 delle stringhe, per le immagini abbiamo alcune varianti dovute soprattutto alla conversione della stessa in un array di byte.

Scarichiamo la classe Base64 di Apache Commons contenuta nel pacchetto commons-codec-1.2.jar.

Il codice nell'esempio mostra come convertire in Base64 un'immagine JPG, ma è adattabile anche ad altri formati:
package base64;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

import org.apache.commons.codec.binary.Base64;

public class Base64ImgConversion {
  public static void main(String[] args) throws IOException {

    BufferedImage immagine = ImageIO.read(new File("C:\\immagine.jpg"));
    ByteArrayOutputStream byteArrOS = new ByteArrayOutputStream();
    ImageIO.write(immagine, "jpg", byteArrOS);

    // ENCODING
    byte[] encoded = Base64.encodeBase64(byteArrOS.toByteArray());

    System.out.println("Base64 Encoded String : " + new String(encoded));

    // DECODING
    byte[] decoded = Base64.decodeBase64(encoded); 
    System.out.println("Base 64 Decoded  String : " + new String(decoded));
  }
}
L'output (con omissis data la lunghezza eccessiva della stringa):
Codificata Base64: /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJ
[...]
L24/56n8hTlvLlj/AK9x9DiiipbZahHsPS4umP8Ax+XI+khFRG8uiObq4P1lb/GiipuzTkj2JBJMTzcTH6uaiMCM2WyT7miipTKSQnlovRRUN1M1uPkC/iM0UUobmj0izLlnlmYs7kmoaKK60fP1viEoyaKKoxFFKKKKlgOBNSp0oopAiDUmIt0UHhm5qhH0FFFar4QZoQ/cH+e1ODFbBsdhx+QooqBosXCiO1kVRgYH866fwxhdUt8KP9cvb3oorGr8JpT+JHpuTSZJoorhO8bTTRRVALRRRQI//9k=

Decodificata Base64:
[...]

Come è possibile vedere dal risultato dell'output, la prima stringa è la codifica Base64 dell'immagine immagine.jpg presente in C:, la seconda è l'immagine decodificata (in pratica il risultato equivalente all'apertura dell'immagine con il blocco note).



Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java