NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Java 2D --- Creare molte anteprime di immagini con un click

 

A volte si ha la necessità 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!

 

 
Vai all'inizio della pagina