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

 

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!

 

Pagina di Francesco Milanese (redbaron85) su Facebook   Pagina di Francesco Milanese (redbaron85) su Google Plus   Profilo di Francesco Milanese (redbaron85) su LinkedIn   Pagina di Francesco Milanese (redbaron85) su Twitter   Canale Youtube di Francesco Milanese (redbaron85ct)

Vai all'inizio della pagina