|
Java 2D --- Creare molte anteprime di immagini con un click
A volte abbiamo bisogno di creare l’anteprima (thumbnail) di un’immagine, ad esempio per inserirla su un sito Web… ovviamente, è possibile utilizzare anche un semplice programma di disegno o fotoritocco per svolgere questo compito, ma quando ci sono 1.000 immagini da elaborare questo lavoro può risultare noioso e ripetitivo, e quando un lavoro è ripetitivo un buon informatico lo definisce una volta e lascia al computer il compito di eseguirlo 1.000 volte !
Descriverò qui due classi Java, "AutoThumbnailer" e "MassThumbnailer", il cui codice sorgente si trova più in basso in questo articolo, per cui vi basterà copiarlo, incollarlo e compilarlo; prima, però, una descrizione dei "punti salienti" !
AUTOTHUMBNAILER
Questo programmino prenderà un solo argomento a linea di comando: il path del file di input.
Il path del file di output viene generato automaticamente a partire da quello di input:
String formato = args[0].substring((args[0].length()-3));
String nomeThumbnail = args[0] + ".THU." + formato;
In seguito, il software ricava un oggetto Image a partire dal file di input e genera la BufferedImage che ci servirà per l’output.
Il metodo drawImage disegna l’immagine passata in input sulla BufferedImage di output, scalandola alle dimensioni prefissate (da me, tali dimensioni sono fisse x=y=100 px, tuttavia potete facilmente editare il codice, ad esempio passando x e y come argomenti a linea di comando, e ricompilare il tutto):
Image in = new ImageIcon(args[0]).getImage();
BufferedImage out = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = out.createGraphics();
g.drawImage(in, 0, 0, 100, 100, null);
g.dispose();
Il blocco try-catch che segue si occupa di scrivere la BufferedImage sul file di output, che avrà un path derivato da quello del file di input, come descritto precedentemente.
MASSTHUMBNAILER
A questo punto vogliamo utilizzare "AutoThumbnailer" per creare molte anteprime di immagini in un colpo solo… MassThumbnailer fa uso del package java.lang.Runtime per eseguire tante istanze di AutoThumbnailer quanti sono i file da processare.
Si tratta di un software molto primitivo: eseguito, crea una lista dei file presenti nella cartella…
Runtime myRuntime = Runtime.getRuntime();
File curDir = new File(".");
String [] ListaFile = curDir.list();
… e, se il file é di tipo JPG e NON é una thumbnail (effettua un controllo sull’estensione), esegue AutoThumbnailer sul file:
if((ListaFile[i].endsWith(".jpg") || (ListaFile[i].endsWith(".JPG"))) && !(ListaFile[i].endsWith(".THU.jpg")) && !(ListaFile[i].endsWith(".THU.JPG")))
{
myRuntime.exec("java AutoThumbnailer " + ListaFile[i]);
}
AutoThumbnailer e MassThumbnailer sono due utility, a dire il vero un pò primitive, che possono essere scaricate, editate e compilate liberamente…
Ne parlo qui soprattutto per illustrare come poter:
-
creare una BufferedImage a partire da una Image e scrivere la stessa su file;
-
eseguire un altro software tramite il comando exec del package Runtime.
Ecco qui il codice di AutoThumbnailer:
//AUTO-THUMBNAILER //Le thumbnail hanno dimensione 100x100; per creare velocemente thumbnails a partire da un file immagine, utilizzare questo programmino Java (scritto dal...sottoscritto): import java.awt.*; import java.awt.Image.*; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.io.File; import javax.swing.ImageIcon; public class AutoThumbnailer { public static void main(String [] args) { // Il primo e unico argomento é il nome del file in ingresso. Sono validi i formati jpg, png, gif e FORSE bmp. String formato = args[0].substring((args[0].length()-3)); String nomeThumbnail = args[0] + ".THU." + formato; Image in = new ImageIcon(args[0]).getImage(); // Il nome del file in uscita é dato dal nome del file in ingresso più l'estensione ".THU.[formato]". // Il file in uscita ha dimensioni 100x100 px. BufferedImage out = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); Graphics2D g = out.createGraphics(); g.drawImage(in, 0, 0, 100, 100, null); g.dispose(); try { ImageIO.write(out, formato, new File(nomeThumbnail)); } catch(Exception e) { System.out.println("Errore: " + e); System.exit(1); } finally { System.exit(0); } } }
...ed ecco qui il codice di MassThumbnailer:
import java.io.*; import java.lang.Runtime; public class MassThumbnailer { public static void main(String[] args) { Runtime myRuntime = Runtime.getRuntime(); File curDir = new File("."); String [] ListaFile = curDir.list(); boolean flag = true; while(flag) { try { for(int i=0; ; i++) {
if((ListaFile[i].endsWith(".jpg") || (ListaFile[i].endsWith(".JPG"))) && !(ListaFile[i].endsWith(".THU.jpg")) && !(ListaFile[i].endsWith(".THU.JPG"))) { myRuntime.exec("java AutoThumbnailer " + ListaFile[i]); } } } catch(Exception e) { flag=false; } } System.exit(0); } }
Buon lavoro ! ;-)
|