En lo que voy de mi proyecto, uno de los requerimientos es subir todo tipo de imagenes a la web y guardarlas en la base de datos. Obviamente si el usuario sube una imagen de 1MB yo no voy a guardar 1MB en un capo BLOB, aqui la implementacion de la solucion.

Basicamente la idea es reducir la imagen a un formato generico y asi poder guardarla en la base de datos (my proyecto asi lo requiere) o en cualquier lugar en el file system. Para reducir una imagen en Java el codigo seria…

public void resize(InputStream input, OutputStream output, int width, int height) throws Exception {
    BufferedImage src = ImageIO.read(input);
    BufferedImage dest = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = dest.createGraphics();
    AffineTransform at = AffineTransform.getScaleInstance((double)width / src.getWidth(), (double)height / src.getHeight());
    g.drawRenderedImage(src, at);
    ImageIO.write(dest, "JPG", output);
    output.close();
}

Basicamente este metodo recibe 1 outputstream (donde vamos a escribir el output de esta operacion) y un inputstream que es el source de nuestro archivo de imagen. El resto es bastante interpretable.