30
Abr
13

Redimensionamiento de imagenes en Java

Hace poco un compañero requería una funcionalidad que le entregase las fotos que tiene en el servidor en un tamaño “estándar” para que al momento de mostrarlas no hubiese unas muy grandes y otras pequeñas y así todas tendrían aproximadamente el mismo tamaño. entonces entre varias páginas pude construir una pequeña clase que:

  • Carga una imagen
  • Redimensiona una imagen
  • Guarda una imagen
  • Realiza una copia redimensionada de la imagen
package ingenio.ds.util.image;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageResizer {
	//Ancho máximo
    public static int MAX_WIDTH=800;
	//Alto máximo
    public static int MAX_HEIGHT=800;

	/*Este método es el de la magia recibe la ruta al archivo original y la ruta donde vamos a guardar la copia
	copyImage("C:\\Users\\IngenioDS\\Desktop\\test.png","C:\\Users\\IngenioDS\\Desktop\\Copia\\test2.png");*/

    public static void copyImage(String filePath, String copyPath) {
        BufferedImage bimage = loadImage(filePath);
        if(bimage.getHeight()>bimage.getWidth()){
        	int heigt = (bimage.getHeight() * MAX_WIDTH) / bimage.getWidth();
            bimage = resize(bimage, MAX_WIDTH, heigt);
        	int width = (bimage.getWidth() * MAX_HEIGHT) / bimage.getHeight();
            bimage = resize(bimage, width, MAX_HEIGHT);
        }else{
        	int width = (bimage.getWidth() * MAX_HEIGHT) / bimage.getHeight();
            bimage = resize(bimage, width, MAX_HEIGHT);
        	int heigt = (bimage.getHeight() * MAX_WIDTH) / bimage.getWidth();
            bimage = resize(bimage, MAX_WIDTH, heigt);
        }
        saveImage(bimage, copyPath);
    }
	
	/*
	Este método se utiliza para cargar la imagen de disco
	*/
    public static BufferedImage loadImage(String pathName) {
        BufferedImage bimage = null;
        try {
            bimage = ImageIO.read(new File(pathName));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bimage;
    }

    /*
	Este método se utiliza para almacenar la imagen en disco
	*/
	public static void saveImage(BufferedImage bufferedImage, String pathName) {
        try {
            String format = (pathName.endsWith(".png")) ? "png" : "jpg";
            File file =new File(pathName);
            file.getParentFile().mkdirs();
            ImageIO.write(bufferedImage, format, file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
	
	/*
	Este método se utiliza para redimensionar la imagen
	*/
    public static BufferedImage resize(BufferedImage bufferedImage, int newW, int newH) {
        int w = bufferedImage.getWidth();
        int h = bufferedImage.getHeight();
        BufferedImage bufim = new BufferedImage(newW, newH, bufferedImage.getType());
        Graphics2D g = bufim.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g.drawImage(bufferedImage, 0, 0, newW, newH, 0, 0, w, h, null);
        g.dispose();
        return bufim;
    }
}

3 Responses to “Redimensionamiento de imagenes en Java”


  1. 1 Jorge
    diciembre 21, 2013 a las 3:45 am

    Excelente amigo, muchas gracias por compartir.

  2. 2 jose
    octubre 16, 2014 a las 9:08 pm

    como se utiliza?

  3. 3 Garu
    noviembre 16, 2014 a las 10:22 pm

    Muchas gracias amigo!😀


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


I+Ds

Dudas consultas
Facebook
Twiter
Google +

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevas publicaciones por correo.

Únete a otros 348 seguidores

Ingenio DS en Facebook

Redes Sociales y Archivos

Entradas

abril 2013
L M X J V S D
« Feb   May »
1234567
891011121314
15161718192021
22232425262728
2930  

IngenioDS en twiter


A %d blogueros les gusta esto: