<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>electroduendes.com &#187; Java</title>
	<atom:link href="http://www.electroduendes.com/blog/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.electroduendes.com/blog</link>
	<description>bitácora de un desarrollador interactivo</description>
	<lastBuildDate>Sun, 27 Jun 2010 21:07:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Procesado de imágenes en Java II</title>
		<link>http://www.electroduendes.com/blog/procesado-de-imagenes-en-java-ii/</link>
		<comments>http://www.electroduendes.com/blog/procesado-de-imagenes-en-java-ii/#comments</comments>
		<pubDate>Tue, 24 Jul 2007 10:28:00 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[imageio]]></category>
		<category><![CDATA[imagenes]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/procesado-de-imagenes-en-java-ii/</guid>
		<description><![CDATA[Javier Murillo me manda una mejora para la clase ImageUtils que publiqué en la entrada procesado de imágenes en Java. Es una alegría saber que otros desarrolladores trabajen con el código que publico, y que, como en este caso, se interesan por mejorarlo y reenviarlo. Gracias Javier!

package es.gaea.utils;
&#160;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import [...]]]></description>
			<content:encoded><![CDATA[<p>Javier Murillo me manda una mejora para la clase ImageUtils que publiqué en la entrada <a href="http://www.electroduendes.com/blog/procesado-de-imagenes-en-java/">procesado de imágenes en Java</a>. Es una alegría saber que otros desarrolladores trabajen con el código que publico, y que, como en este caso, se interesan por mejorarlo y reenviarlo. Gracias Javier!</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">es.gaea.utils</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.RenderingHints</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.geom.AffineTransform</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.image.AffineTransformOp</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.image.BufferedImage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.File</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.IOException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.imageio.ImageIO</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.log4j.Logger</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/** Clase que implementa un procesador para imagenes y juguetear con ellas */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ProcesadorImagenes <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/** Logger de la clase */</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> Logger logger <span style="color: #339933;">=</span> Logger.<span style="color: #006633;">getLogger</span><span style="color: #009900;">&#40;</span>ProcesadorImagenes.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/** Opciones de renderizado para las imagenes */</span> 
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">RenderingHints</span> opciones <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RenderingHints</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/** Constructor de la clase */</span>
	<span style="color: #000000; font-weight: bold;">public</span> ProcesadorImagenes<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Cargo las opciones de renderizado que me apetezcan	</span>
		opciones.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_ANTIALIASING</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_ANTIALIAS_ON</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		opciones.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_ALPHA_INTERPOLATION</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_ALPHA_INTERPOLATION_QUALITY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		opciones.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_DITHERING</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_DITHER_DISABLE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		opciones.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_FRACTIONALMETRICS</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_FRACTIONALMETRICS_ON</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		opciones.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_INTERPOLATION</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_INTERPOLATION_NEAREST_NEIGHBOR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		opciones.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_RENDERING</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_RENDER_QUALITY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		opciones.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_STROKE_CONTROL</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_STROKE_NORMALIZE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		opciones.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_TEXT_ANTIALIASING</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_TEXT_ANTIALIAS_ON</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/** Devuelve la lista de formatos disponibles a leer por ImageIO	
	 * @return un array de strings con los mismos.	
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> dameFormatosUsables<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">return</span> ImageIO.<span style="color: #006633;">getReaderFormatNames</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/** Calcula el factor de escala minimo y en base a eso 
	 * escala la imagen segun dicho factor.	
	* @param nMaxWidth maximo tamaño para el ancho
	* @param nMaxHeight nmaximo tamaño para el alto	
	* @param imagen Imagen que vamos a escalar
	* @return Devuelve la imagen escalada para poderla trastocar o null si hay error
	*/</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">BufferedImage</span> escalarATamanyo<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">BufferedImage</span> imagen,
			<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> maximoAncho, <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> maximoAlto<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Comprobacion de parametros</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>imagen <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">||</span> maximoAlto <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> maximoAncho <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Capturo ancho y alto de la imagen </span>
		<span style="color: #000066; font-weight: bold;">int</span> anchoImagen <span style="color: #339933;">=</span> imagen.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">int</span> altoImagen <span style="color: #339933;">=</span> imagen.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Calculo la relacion entre anchos y altos de la imagen</span>
		<span style="color: #000066; font-weight: bold;">double</span> escalaX <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>maximoAncho <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>anchoImagen<span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">double</span> escalaY <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>maximoAlto <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>altoImagen<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Tomo como referencia el minimo de las escalas</span>
		<span style="color: #000066; font-weight: bold;">double</span> fEscala <span style="color: #339933;">=</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">min</span><span style="color: #009900;">&#40;</span>escalaX, escalaY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Devuelvo el resultado de aplicar esa escala a la imagen</span>
		<span style="color: #000000; font-weight: bold;">return</span> escalar<span style="color: #009900;">&#40;</span>fEscala, imagen<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/** Escala una imagen en porcentaje.
	* @param factorEscala ejemplo: factorEscala=0.6 (escala la imagen al 60%)
	* @param srcImg una imagen BufferedImage
	* @return un BufferedImage escalado
	*/</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">BufferedImage</span> escalar<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">double</span> factorEscala, <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">BufferedImage</span> srcImg<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Comprobacion de parametros</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>srcImg <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Compruebo escala nula</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>factorEscala <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">return</span> srcImg<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// La creo con esas opciones</span>
		<span style="color: #003399;">AffineTransformOp</span> op <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">AffineTransformOp</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">AffineTransform</span>.<span style="color: #006633;">getScaleInstance</span><span style="color: #009900;">&#40;</span>factorEscala, factorEscala<span style="color: #009900;">&#41;</span>, opciones<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Devuelve el resultado de aplicar el filro sobre la imagen</span>
		<span style="color: #000000; font-weight: bold;">return</span> op.<span style="color: #006633;">filter</span><span style="color: #009900;">&#40;</span>srcImg, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/** Metodo que guarda una imagen en disco 
	 * @param imagen Imagen a almacenar en disco
	 * @param rutaFichero Ruta de la imagen donde vamos a salvar la imagen
	 * @param formato Formato de la imagen al almacenarla en disco
	 * @return Booleano indicando si se consiguio salvar con exito la imagen
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> salvarImagen<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">BufferedImage</span> imagen, 
			<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> rutaFichero, <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> formato<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Comprobacion de parametros</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>imagen <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> rutaFichero <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> formato <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
				ImageIO.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span> imagen, formato, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">File</span><span style="color: #009900;">&#40;</span> rutaFichero <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// Fallo al guardar</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>logger.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #003399;">String</span> CODIGO_MENSAJE_ERROR_GUARDADO_FICHERO <span style="color: #339933;">=</span> 
						<span style="color: #0000ff;">&quot;No se pudo guardar correctamente la imagen en &quot;</span> <span style="color: #339933;">+</span> 
						rutaFichero<span style="color: #339933;">;</span>
					logger.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span>CODIGO_MENSAJE_ERROR_GUARDADO_FICHERO<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// Fallo en los parametros </span>
			<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/** Metodo principal de la clase. Usado como prueba
	 * @param args Argumentos del metodo
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> args<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Variables locales</span>
		<span style="color: #003399;">BufferedImage</span> imagen<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			imagen <span style="color: #339933;">=</span> ImageIO.<span style="color: #006633;">read</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">File</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;prueba.jpg&quot;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			ProcesadorImagenes pi <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ProcesadorImagenes<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// Escalo algunas imagenes como pruebas</span>
			<span style="color: #003399;">BufferedImage</span> imagen800_600 <span style="color: #339933;">=</span> pi.<span style="color: #006633;">escalarATamanyo</span><span style="color: #009900;">&#40;</span>imagen,<span style="color: #cc66cc;">800</span>, <span style="color: #cc66cc;">600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">BufferedImage</span> imagenSnap_Shot <span style="color: #339933;">=</span> pi.<span style="color: #006633;">escalarATamanyo</span><span style="color: #009900;">&#40;</span>imagen,<span style="color: #cc66cc;">96</span>, <span style="color: #cc66cc;">96</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">BufferedImage</span> imagenMediana <span style="color: #339933;">=</span> pi.<span style="color: #006633;">escalarATamanyo</span><span style="color: #009900;">&#40;</span>imagen,<span style="color: #cc66cc;">500</span>, <span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">//	Las salvo en disco</span>
			pi.<span style="color: #006633;">salvarImagen</span><span style="color: #009900;">&#40;</span>imagen800_600,<span style="color: #0000ff;">&quot;imagenG.jpg&quot;</span>,<span style="color: #0000ff;">&quot;jpg&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pi.<span style="color: #006633;">salvarImagen</span><span style="color: #009900;">&#40;</span>imagenSnap_Shot,<span style="color: #0000ff;">&quot;imagenP.jpg&quot;</span>,<span style="color: #0000ff;">&quot;jpg&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pi.<span style="color: #006633;">salvarImagen</span><span style="color: #009900;">&#40;</span>imagenSnap_Shot,<span style="color: #0000ff;">&quot;imagenE.png&quot;</span>,<span style="color: #0000ff;">&quot;PNG&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pi.<span style="color: #006633;">salvarImagen</span><span style="color: #009900;">&#40;</span>imagenMediana,<span style="color: #0000ff;">&quot;imagenA.gif&quot;</span>,<span style="color: #0000ff;">&quot;gif&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// Extraigo la lista de formatos capaces de leer</span>
			<span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> formatos <span style="color: #339933;">=</span> pi.<span style="color: #006633;">dameFormatosUsables</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// los voy mostrando</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> formatos.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>formatos<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// Final del metodo con exito</span>
			<span style="color: #003399;">System</span>.<span style="color: #006633;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/procesado-de-imagenes-en-java-ii/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Simple Clase para escalado de imágenes en Java</title>
		<link>http://www.electroduendes.com/blog/simple-clase-para-procesado-de-imagenes-en-java/</link>
		<comments>http://www.electroduendes.com/blog/simple-clase-para-procesado-de-imagenes-en-java/#comments</comments>
		<pubDate>Thu, 21 Jul 2005 09:21:25 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[imagenes]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=4</guid>
		<description><![CDATA[Actualización: Esta clase es bastante antigua (2005). A nivel didáctico te puede servir, pero para sistemas de producción, recomiendo librerías más completas como imagemagik.
Llevo unos cuatro años ya trabajando en proyectos con Java y nunca había tenido que trabajar con la API de imágenes que Sun proporciona. Bueno, pues ahora estoy embarcado en un pequeño [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Actualización:</strong> Esta clase es bastante antigua (2005). A nivel didáctico te puede servir, pero para sistemas de producción, recomiendo librerías más completas como <a href="http://www.jmagick.org/index.html">imagemagik</a>.</p>
<p>Llevo unos cuatro años ya trabajando en proyectos con Java y nunca había tenido que trabajar con la API de imágenes que Sun proporciona. Bueno, pues ahora estoy embarcado en un pequeño proyecto en el cual había que procesar imágenes. Como siempre me pasa, debido a tiempos, prefiero tirar de google  y mirar lo que alguien ha andado y defenderme como buenamente puedo, antes que chaparme la API. Craso error. Después de dar vueltas me bajo un código algo obsoleto, para, un día después descubrir la clase ImageIO, disponible a partir de la versión 1.4, mas potente para estos menesteres.</p>
<p>No es una panacea de clase, pero seguro que ayuda a más de un despistado como yo hace un par de días <img src='http://www.electroduendes.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*
 * ImageUtils.java
 *
 * Created on 20 de julio de 2005, 11:47
 * Resizes jpeg image files on your file system.
 * Uses the com.sun.image.codec.jpeg package shipped
 * by Sun with Java 2 Standard Edition.
 *
 * @author Randy Belknap
 * @revision Alejandro Sánchez Marcos
 * se aprovecha la nueva clase ImageIO de 1.4
 * y se añaden algunos métodos nuevos 
 */</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.electroduendes.util.image</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.geom.AffineTransform</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.image.AffineTransformOp</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.image.BufferedImage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.File</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.imageio.ImageIO</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.log4j.Logger</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
&nbsp;
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ImageUtils <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">static</span> Logger logger <span style="color: #339933;">=</span> Logger.<span style="color: #006633;">getLogger</span><span style="color: #009900;">&#40;</span>ImageUtils.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">/*
     * devuelve la lista de formatos disponibles a leer por ImageIO
     * @return un array de strings con los mismos.
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> getAvailableFormats<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> ImageIO.<span style="color: #006633;">getReaderFormatNames</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     * devuelve una imagen (buffer) en función de la ruta de un archivo
     * mejoras
     * @param la ruta del archivo con su nombre
     * @return BufferedImage la imagen en el buffer
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">BufferedImage</span> loadBufferedImage<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> fileName<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">BufferedImage</span> image <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">/*FileInputStream fis = new FileInputStream(fileName);JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fis);bi = decoder.decodeAsBufferedImage();fis.close();*/</span>
            <span style="color: #666666; font-style: italic;">// MAS RAPIDO a partir de 1.4</span>
            image <span style="color: #339933;">=</span> ImageIO.<span style="color: #006633;">read</span><span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">File</span><span style="color: #009900;">&#40;</span> fileName <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            logger.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;error al intentar leer la imágen&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> image<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * comprueba que la imágen tiene un mínimo en pixels
     * width y height tienen que tener un tamaño igual o mayor que el pasado
     * como argumento
     *
     * @param w ancho mínimo
     * @param h alto mínimo
     * @return true o false
     *
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">boolean</span> isGreaterThanMinSize<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> w, <span style="color: #000066; font-weight: bold;">int</span> h, <span style="color: #003399;">BufferedImage</span> imgSrc<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">int</span> nHeight <span style="color: #339933;">=</span> imgSrc.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> nWidth <span style="color: #339933;">=</span> imgSrc.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>nHeight<span style="color: #339933;">&lt;</span>h <span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>nWidth<span style="color: #339933;">&lt;</span>w<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     * calcula el factor de escala mínimo y en base a eso escala la imagen 
     * según el dicho factor. 
     * @param nMaxWidth minimo tamaño para el ancho
     * @param nMaxHeight minimo tamaño para el alto
     * @param imgSrc la imágen 
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">BufferedImage</span> scaleToSize<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> nMaxWidth, <span style="color: #000066; font-weight: bold;">int</span> nMaxHeight, <span style="color: #003399;">BufferedImage</span> imgSrc<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">int</span> nHeight <span style="color: #339933;">=</span> imgSrc.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> nWidth <span style="color: #339933;">=</span> imgSrc.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">double</span> scaleX <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>nMaxWidth <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>nWidth<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">double</span> scaleY <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>nMaxHeight <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>nHeight<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">double</span> fScale <span style="color: #339933;">=</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">min</span><span style="color: #009900;">&#40;</span>scaleX, scaleY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> scale<span style="color: #009900;">&#40;</span>fScale, imgSrc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/*
     * escala una imagen en porcentaje.
     * @param scale ejemplo: scale=0.6 (escala la imágen al 60%)
     * @param srcImg una imagen BufferedImage
     * @return un BufferedImage escalado
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">BufferedImage</span> scale<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span> scale, <span style="color: #003399;">BufferedImage</span> srcImg<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>scale <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> srcImg<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #003399;">AffineTransformOp</span> op <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">AffineTransformOp</span>
        <span style="color: #009900;">&#40;</span><span style="color: #003399;">AffineTransform</span>.<span style="color: #006633;">getScaleInstance</span><span style="color: #009900;">&#40;</span>scale, scale<span style="color: #009900;">&#41;</span>, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> op.<span style="color: #006633;">filter</span><span style="color: #009900;">&#40;</span>srcImg, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> saveImageToDisk<span style="color: #009900;">&#40;</span><span style="color: #003399;">BufferedImage</span> bi, <span style="color: #003399;">String</span> str, <span style="color: #003399;">String</span> format<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>bi <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> str <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// más rápido con ImageIO</span>
            <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                ImageIO.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span> bi, format <span style="color: #666666; font-style: italic;">/* formato */</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">File</span><span style="color: #009900;">&#40;</span> str <span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">/* destino */</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> args<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>args.<span style="color: #006633;">length</span> <span style="color: #339933;">!=</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>usage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>args<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">BufferedImage</span> bImg <span style="color: #339933;">=</span> loadBufferedImage<span style="color: #009900;">&#40;</span>args<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>bImg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">BufferedImage</span> bImgEscaladaG <span style="color: #339933;">=</span> scaleToSize<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">800</span>, <span style="color: #cc66cc;">600</span>, bImg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">BufferedImage</span> bImgEscaladaP <span style="color: #339933;">=</span> scaleToSize<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">320</span>, <span style="color: #cc66cc;">200</span>, bImg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        saveImageToDisk<span style="color: #009900;">&#40;</span>bImgEscaladaG, args<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span>,<span style="color: #0000ff;">&quot;JPEG&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        saveImageToDisk<span style="color: #009900;">&#40;</span>bImgEscaladaP, args<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span>,<span style="color: #0000ff;">&quot;JPEG&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> usage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;usage: java ImageUtils archivo_original imagen_grande imagen_pequeña &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p></h></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/simple-clase-para-procesado-de-imagenes-en-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
