Come puoi creare immagini con Java? Ti introduco il discorso in questo articolo per farti capire che è realmente possibile creare delle immagini con Java.
Questo articolo dà per scontato che tu conosci Java ed il codice è volutamente inserito tutto all’interno di un unico metodo così da poterti aiutare nel copia/incolla 🙂 .
Se non conosci Java inizia a studiarlo da un buon libro.
Come Creare Immagini con Java
Il motivo per cui scrivo questo articolo è che può accadere che un cliente mi chieda di creare un excel con un’immagine interna.
Utilizzo la libreria Apache POI per creare gli excel sulla quale scriverò qualcosa nel dettaglio nei prossimi giorni.
Il problema è che non c’è un modo per creare un banale organigramma, i grafici sono molto limitati, l’utente non vuole comunque mettere mano all’excel, ma solo guardarlo.
Creiamo l’organigramma
In questo esempio ti faccio vedere come creare un’immagine contenente un organigramma in bianco e nero e senza troppe fantasie.
Solo 2 livelli:
- Il Boss
- Le compagnie che possiede
Il risultato finale
Il risultato che vogliamo ottenere è qualcosa di questo tipo:
Come ottenere il risultato
Per creare immagini con Java è necessario utilizzare alcune classi che Java ci mette a disposizione.
Per ottenere il risultato faremo in ordine queste operazioni:
- Creiamo un DTO contenente una stringa “name” ed una lista di stringhe chiamata “companies”
- Creiamo una classe da richiamare dal Main
- Inseriamo un metodo chiamato createImage che riceve come parametro il nome dell’immagine (gli passeremo nome + estensione)
- All’interno di questo metodo popoleremo il DTO inserendo “Paolo” come possessore di 4 compagnie
- Creiamo un’immagine
- Impostiamo il background
- Impostiamo colore e font del testo
- Iniziamo disegnando un rettangolo che conterrà “Paolo”
- Scriveremo la logica per inserire le linee e le altre compagnie
- Scriveremo il tutto nel file
Niente di più semplice vero?
Vediamo il codice
public void createImage(String imageName) throws IOException { Dto dto1 = new Dto(); dto1.name = "Paolo"; dto1.companies.add("IT Basic"); dto1.companies.add("Panini"); dto1.companies.add("Barilla"); dto1.companies.add("ABC Entertainment"); BufferedImage img = new BufferedImage(dto1.companies.size() * 600, 1256, BufferedImage.TYPE_INT_RGB); Graphics2D graphic = img.createGraphics(); graphic.setBackground(new Color(255, 255, 255)); //Background bianco graphic.fillRect(0, 0, dto1.companies.size() * 600, 1256); //Coloro tutto di bianco graphic.setColor(new Color(0, 0, 0)); //Imposto il colore del testo a nero graphic.setFont(new Font("TimesRoman", Font.PLAIN, 33)); //Scelgo font e font size graphic.drawRect(590, 70, dto1.name.length() * 24, 60); //Disegno il rettangolo graphic.drawString(dto1.name, 600, 100); //Disegno il nome graphic.drawLine(600, 130, 600, 200); //Tiro una linea verticale x1,y1,x2,y2 for (int i = 0; i < dto1.companies.size(); i++) { //Per ogni compagnia int x1 = (i + 1) * 300; //x di partenza int x2 = x1 + 300; //x di arrivo if (i != dto1.companies.size() - 1) //Se non sei l'ultima compagnia graphic.drawLine(x1, 200, x2, 200); //Aggiungo una riga orizzontale lunga da 300 a 600, poi da 600 a 900, ecc. graphic.drawLine(x1, 200, x1, 300); //Disegno riga verticale graphic.drawRect(x1 - 130, 300, dto1.companies.get(i).length() * 24, 60); //Rettangolo graphic.drawString(dto1.companies.get(i), x1 - 100, 330); //Nome compagnia } //Scrittura del file File f = new File(System.getProperty("user.dir") + "/" + imageName); ImageIO.write(img, "JPEG", f); }
Per creare immagini con java, in questo caso un organigramma, abbiamo scritto questo codice.
Chiedo perdono perché non segue le grandi leggi del codice pulito, alle quali sono devoto, ma credo che creare un metodo corposo come questo può essere d’aiuto inizialmente al lettore.
In ordine:
- Dalla riga 2 alla riga 7 creiamo un oggetto Dto.
E’ un oggetto composto dalla stringa “name” di tipo public e da un ArrayList<String> sempre public. - A riga 9 creiamo l’immagine impostando dimensione e colori.
Il primo parametro è la larghezza pari al numero delle compagnie moltiplicate per 600. Dopo di che impostiamo l’altezza pari a 1256 pixel ed infine i colori di base. - Dalla riga 11 alla 14 impostiamo il colore di sfondo, riempiamo il rettangolo inteso come tutto il rettangolo dell’immagine ed impostiamo colore del testo e font.
- Alla riga 16 disegno un rettangolo.
Il metodo drawRect ha bisogno di sapere le coordinate x ed y di partenza e poi lo scostamento da x e lo scostamento da y. Al centro del rettangolo voglio posizionare il contenuto del campo “name” nel DTO. Di conseguenza imposto che il rettangolo partirà da x pari a 590 e da y pari a 70. Dovrà estendersi in larghezza di “lunghezza del nome moltiplicato per 24” e in altezza di 60 pixel.
Perché moltiplico la lunghezza del nome per 24? Con una dimensione del font pari a 33px sembra la scelta migliore per dare il giusto spazio al contenuto. - Alla riga 17 scrivo il nome.
Utilizzo il metodo per disegnare le stringhe, drawString. Questo metodo prende in ingresso la stringa e le coordinate x ed y da cui iniziare a scrivere. - Dunque disegno una linea verticale.
Utilizzo il metodo drawLine che prende in ingresso x1, y1, x2 ed y2. Per essere precisi vanno indicate le coordinate del punto di partenza della linea e quelle del punto di arrivo. - A riga 21 inizia la scrittura delle compagnie.
Tramite un ciclo for determiniamo i valori di x1 e x2. Saranno determinati dal valore di “i”. Dovranno variare spostandosi sempre più a destra per ogni compagnia da scrivere. Quindi se non siamo arrivati all’ultima compagnia creiamo una riga orizzontale. Dopo di che creiamo una riga verticale con sotto un rettangolo contenente il nome della compagnia. - Alla riga 36 creiamo il file.
In ingresso il metodo createImage prende una stringa che è “imageName”. Io gli passo qualcosa del tipo “Organigramma.jpg”. Adesso al costruttore di File passiamo il percorso del nostro progetto aggiungendo il nome dell’immagine (nome + estensione). Aprendo la cartella del progetto troveremo subito lì la nostra immagine. - Alla riga 37 scriviamo il file.
Conclusioni
In questo articolo ti ho insegnato a creare immagini con Java. Spero di essere stato abbastanza preciso. Nelle prossime guide ti farò vedere anche come creare un excel con Apache POI e come inserire dentro un’immagine appena creata.
Sei interessato ad altre guide come questa? Ho creato 2 belle guide per esempio sulle animazioni del CSS e sul costruire un bot Telegram!
Se vuoi iscriviti alla newsletter e non ti perderai i nuovi articoli. Mando da 1 a 4 mail al mese ricapitolando dove siamo arrivati con ogni guida. Con la newsletter hai anche accesso a libri ed ebook gratuiti, così come a coupon Udemy ? .
Per dubbi o domande scrivimi nei commenti ? .
Se ti è piaciuto l’articolo seguimi su Facebook e Twitter oppure rimani sempre aggiornato con la newsletter (da 1 a 4 mail al mese!).