Redimensionar imagem com java e obter o array de bytes

Desta vez irei postar algo que precisei a alguns dias, para redimensionar imagens e guardar essas imagens,
em uma pasta do S.O. Porém quando eu estava tentando guardar seu array de bytes por meio do modo tradicional
escrevendo ela no OutputStream diretamente, não estava guardando seu bytes corretamente, até que descobri a seguinte solução de escrever seu array de bytes através do ByteArrayOutputStream e escrever por meio do ImageIO.write. Veja como ficou as classes.

 
Classe para redimensionar Imagens

package com.wordpress.cassiosousa.redimensionar;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.imageio.ImageIO;

/**
 * Redimensiona imagem e obtém os byte[] dela
 * @author Cássio Alexandre de Sousa
 */
public class RedimensionarImagem {

	private static final Logger logger = Logger.getLogger(RedimensionarImagem.class.getName());
	private static final String EXTENSAO = "JPG";
	private int largura = 100;
	private int altura = 100;

	/**
	 * Construtor padrão
	 */
	public RedimensionarImagem(int largura,int  altura) {
		super();
		this.altura = altura;
		this.largura = largura;
	}

	/**
	 * Redimensiona imagem e retorna um array de bytes
	 * @param imagem
	 * @return
	 */
	public byte[] redimensionar(InputStream imagem){

		byte[] bytesImagem = null;
		Graphics2D graphisImagem = null;
		ByteArrayOutputStream baos = null;

		try {
			//transforma InputStream em uma BufferedImage
			BufferedImage bufImagemLida =  ImageIO.read(imagem);

			//cria imagem para
			BufferedImage imagemRedimensionada = new BufferedImage(largura,altura , BufferedImage.TYPE_INT_RGB);

			//realiza o redimensionamento da imagem
			graphisImagem = imagemRedimensionada.createGraphics();
			graphisImagem.drawImage(bufImagemLida,0,0, largura, altura,null);
			baos = new ByteArrayOutputStream();

			//escreve a imagem no OutputStream
			ImageIO.write(imagemRedimensionada, EXTENSAO, baos);

			//transforma o OutputStream em array de bytes e retorna
			bytesImagem = baos.toByteArray();
		} catch (IOException e) {
			logger.log(Level.SEVERE, e.getMessage());
		}finally{
			//libera recursos
			if(graphisImagem != null){
				graphisImagem.dispose();
			}

			if(baos != null){
				try {
					baos.close();
				} catch (IOException e) {
					logger.log(Level.SEVERE, e.getMessage());
				}
			}
		}

		return bytesImagem;
	}

	/**
	 * Obtém largura
	 * @return largura
	 */
	public int getLargura() {
		return largura;
	}

	/**
	 * Obtém altura
	 * @return altura
	 */
	public int getAltura() {
		return altura;
	}

}

Redimensionador de imagens

/**
 *
 */
package com.wordpress.cassiosousa.redimensionar;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Redimensionar que utiliza a classe<br/>
 * RedimensionarImagem para fazer o redimensionamento
 * @author Cássio Alexandre de Sousa
 */
public class Redimensionador {

	//log da aplicação
	private static final Logger logger = Logger.getLogger(Redimensionador.class.getName());
	private static final String DE = "C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg";
	private static final String PARA = "C:\\Users\\Public\\Pictures\\Sample Pictures\\Deserto_Redimensionada.jpg";

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//cria o redimensionar imagem
		RedimensionarImagem redImagem = new RedimensionarImagem(400,200);

		FileOutputStream fos = null;
		try {
			//realizar o redimensionamento obtendo o array de byte para salver
			byte[] bytesImagem = redImagem.redimensionar(new FileInputStream(DE));
			fos = new FileOutputStream(PARA);
			fos.write(bytesImagem);
		} catch (FileNotFoundException e) {
			logger.log(Level.SEVERE, e.getMessage());
		} catch (IOException e) {
			logger.log(Level.SEVERE, e.getMessage());
		}finally{
			//libera recursos
			if(fos != null){
				try {
					fos.close();
				} catch (IOException e) {
					logger.log(Level.SEVERE, e.getMessage());
				}
			}
		}
	}
}

Espero que isso possa ajudar quem deseja, redimensionar imagens com java.

, , , , , ,

  1. #1 by Railon on fevereiro 14, 2012 - 7:57 am

    Muito bom valeu!!!!

  2. #2 by Railon on fevereiro 14, 2012 - 7:58 am

    Excelente post

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.