Tema: Java 2D 
Pregunta: Como puedo generar Thumbnails en java?? 
 Respuesta
 Respuesta: Bueno, primero te explico que un Thumbnail es una pequeña imagen generada de una de mayor tamaño, son para visualizar muchas imagenes en tamaño pequeño. 
Con JAVA esto es posible porsupuesto 

  , acontinuacion voy a poner una clase que es la encargada de hacer el trabajo, despues pondre la implementacion de dicha clase. 
he puesto comentarios a las partes de codigo mas importante 
 
  Código PHP:
    import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/*
 * Created on Jan 23, 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
/**
 * @author Crysfel Villa
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Imagen {
    private String imgOriginal;
    private String imgResult;
    private int calidad;
    private int width;
    private int height;
    
    
    public void resize()throws Exception{
        //Cargamos la imagen y la preparamos para manipularla
        Image image = Toolkit.getDefaultToolkit().getImage(imgOriginal);
        MediaTracker mediaTracker = new MediaTracker(new Container());
        mediaTracker.addImage(image, 0);
        mediaTracker.waitForID(0);
        //Sacamos la proporcion de las nuevas medidas
        double tnsPro = (double)width/(double)height;
        //Calculamos la proporcion de la imagen original
        int imgWidth = image.getWidth(null);
        int imgHeight = image.getHeight(null);
        double imgPro = (double)imgWidth / (double)imgHeight;
        //comprobamos cual de las dos medidas introducidas esta desproporcionada
        //para asi corregirla
        if (tnsPro < imgPro) {
            //asignamos una nueva height a la imagen generada
            //para mantener la proporcion con respecto a la original
            height = (int)(width / imgPro);
        } else {
            //lo mismo pero con el width
            width = (int)(height * imgPro);
        }
        
        //Creamos la imagen a generar, con los atributos requeridos, ancho, algo, y
        //el ultimo parametro especifica que vamos a guardar la imagen en formato "8-bit RGB"
        //que es un formato compatible con sistemas basados en Solaris o Windows
        //hay mas formatos, ver http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/BufferedImage.html
        BufferedImage tnsImg = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics2D = tnsImg.createGraphics();
        graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        graphics2D.drawImage(image, 0, 0, width, height, null);
        
        //Preparamos para escribir la imagen generada en el disco
        BufferedOutputStream out = new BufferedOutputStream(new    FileOutputStream(imgResult));
        //creamos el "parseador" para guardar la imagen en formato JPG
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tnsImg);
        //Asignamos la calidad con la que se va a guardar la imagen de 0-100
        calidad = Math.max(0, Math.min(calidad, 100));
        param.setQuality((float)calidad / 100.0f, false);
        encoder.setJPEGEncodeParam(param);
        encoder.encode(tnsImg);
        out.close(); 
        //there you go =D
    }
    
    
    /**
     * @return Returns the calidad.
     */
    public int getCalidad() {
        return calidad;
    }
    /**
     * @param calidad The calidad to set.
     */
    public void setCalidad(int calidad) {
        this.calidad = calidad;
    }
    /**
     * @return Returns the height.
     */
    public int getHeight() {
        return height;
    }
    /**
     * @param height The height to set.
     */
    public void setHeight(int height) {
        this.height = height;
    }
    /**
     * @return Returns the imgOriginal.
     */
    public String getImgOriginal() {
        return imgOriginal;
    }
    /**
     * @param imgOriginal The imgOriginal to set.
     */
    public void setImgOriginal(String imgOriginal) {
        this.imgOriginal = imgOriginal;
    }
    /**
     * @return Returns the imgResult.
     */
    public String getImgResult() {
        return imgResult;
    }
    /**
     * @param imgResult The imgResult to set.
     */
    public void setImgResult(String imgResult) {
        this.imgResult = imgResult;
    }
    /**
     * @return Returns the width.
     */
    public int getWidth() {
        return width;
    }
    /**
     * @param width The width to set.
     */
    public void setWidth(int width) {
        this.width = width;
    }
} 
    
  Ok, pues como veraz, esta clase tiene las propiedades con las que quieres que se genere el TNS, y el metodo para generarlos se llama 
resize(). 
ahora pongo la forma de uso.  
 Código PHP:
    /*
 * Created on Jan 23, 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
/**
 * @author Crysfel Villa
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Thumbnail {
    public static void main(String[] args) throws Exception {
        Imagen img = new Imagen();
        //seleccionamos la imagen a modificar
        img.setImgOriginal("09.jpg");
        //el nombre con el cual se generara el TNS
        img.setImgResult("tns.jpg");
        //la calidad
        img.setCalidad(100);
        //las nuevas medidas, deben ser proporcionales
        //aunque si alguna no lo es, la clase lo corrige
        img.setWidth(90);
        img.setHeight(60);
        
        //there u go ;)
        img.resize();
    }
} 
    
  Ok, cabe aclarar que la clase tambien se puede usar en algun servlet o en un JSP, en fin, la puedes usar donde quieras 
 
 
have funnnnnnnnnn 
