<?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>v.codeweblog &#187; ejemplos</title>
	<atom:link href="http://weblog.v-code.net/tag/ejemplos/feed/" rel="self" type="application/rss+xml" />
	<link>http://weblog.v-code.net</link>
	<description>Blog de Víctor Rodríguez</description>
	<lastBuildDate>Tue, 15 Mar 2011 11:11:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Crop de imágenes JPG con Java Advanced Imaging API (JAI)</title>
		<link>http://weblog.v-code.net/2010/05/crop-de-imagenes-jpg-con-java-advanced-imaging-api-jai/</link>
		<comments>http://weblog.v-code.net/2010/05/crop-de-imagenes-jpg-con-java-advanced-imaging-api-jai/#comments</comments>
		<pubDate>Thu, 20 May 2010 11:42:51 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[problemas]]></category>
		<category><![CDATA[Soluciones]]></category>
		<category><![CDATA[tutoriales]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=340</guid>
		<description><![CDATA[Hoy la entrada será de nuevo una solución a un problema encontrado en el proyecto en el que trabajo actualmente. Y es que cuando quieres editar imágenes con Java las alternativas no son muchas y tampoco fáciles. Nosotros nos decidimos por utilizar Java Advanced Imaging API, una librería que no se actualiza desde 2007&#8230; bueno, [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy la entrada será de nuevo una solución a un problema encontrado en el proyecto en el que trabajo actualmente. Y es que cuando quieres editar imágenes con Java las alternativas no son muchas y tampoco fáciles. Nosotros nos decidimos por utilizar <a href="http://java.sun.com/javase/technologies/desktop/media/jai/">Java Advanced Imaging API</a>, una librería que no se actualiza desde 2007&#8230; bueno, no toca entrar a discutir este tema.</p>
<p>Vamos a entrar en materia. El código:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> cropImage<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainputstream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">InputStream</span></a> is, <span style="color: #000066; font-weight: bold;">int</span> topLeftmx, <span style="color: #000066; font-weight: bold;">int</span> topLeftmy, <span style="color: #000066; font-weight: bold;">int</span> roiWidth, <span style="color: #000066; font-weight: bold;">int</span> roiHeight, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> tipoImagen<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// 1 - generar el crop</span><br />
&nbsp; &nbsp; SeekableStream s <span style="color: #339933;">=</span> SeekableStream.<span style="color: #006633;">wrapInputStream</span><span style="color: #009900;">&#40;</span>is, <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; RenderedOp image <span style="color: #339933;">=</span> JAI.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;stream&quot;</span>, s<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>OpImage<span style="color: #009900;">&#41;</span>image.<span style="color: #006633;">getRendering</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setTileCache</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><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aparameterblock+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ParameterBlock</span></a> pb <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aparameterblock+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ParameterBlock</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; pb.<span style="color: #006633;">addSource</span><span style="color: #009900;">&#40;</span>image<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; pb.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>topLeftmx<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; pb.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>topLeftmy<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; pb.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>roiWidth<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; pb.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span>roiHeight<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; image <span style="color: #339933;">=</span> JAI.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;crop&quot;</span>,pb<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// 2 - codificar la imagen resultado del crop</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abytearrayoutputstream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ByteArrayOutputStream</span></a> baos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abytearrayoutputstream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ByteArrayOutputStream</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; JAI.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;encode&quot;</span>, image, baos, tipoImagen, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> baos.<span style="color: #006633;">toByteArray</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Básicamente esta función tiene 2 partes, la primera (1) donde se genera el crop de la imagen, y la segunda (2) donde se codifica la imagen resultado del crop realizado. Es decir, informar si la imagen es JPEG, PNG, TIFF&#8230;</p>
<p>Cuál es el problema que nos encontramos, si vamos a la línea marcada (3):</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">JAI.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;encode&quot;</span>, image, baos, tipoImagen, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3</span></div></div>
<p>estamos creando la codificación, indicando con la variable tipoImagen si se trata de una &#8220;JPEG&#8221; (&#8220;JPG&#8221; no funciona), &#8220;PNG&#8221;, &#8220;TIFF&#8221; o demás formatos soportados.</p>
<p>Funcionar funciona correctamente con cada uno de los tipos de imagen que le pasemos, excepto con &#8220;JPEG&#8221;. Con este tipo las coordenadas elegidas para realizar el crop sobre la imagen simplemente se pierden. No se porqué, pero se pierden.</p>
<p>La solución encontrada en <a href="http://forums.java.net/">java.net Forums</a>, <a href="http://forums.java.net/jive/thread.jspa?messageID=393038&#393038">Thread: The crop operation seems to ignore (x,y) offset</a> es la siguiente:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">JAI.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;encode&quot;</span>, image.<span style="color: #006633;">getAsBufferedImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, baos, tipoImagen, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3</span></div></div>
<p>La solución es pasar la variable image (de tipo RenderedOp) a tipo BufferedImage en la función create de la clase JAI. Milagrosamente todo vuelve a funcionar, incluido el tipo &#8220;JPEG&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.net/2010/05/crop-de-imagenes-jpg-con-java-advanced-imaging-api-jai/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Don&#039;t copy, please!</title>
		<link>http://weblog.v-code.net/2008/10/dont-copy-please/</link>
		<comments>http://weblog.v-code.net/2008/10/dont-copy-please/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 08:30:01 +0000</pubDate>
		<dc:creator>VictorR</dc:creator>
				<category><![CDATA[copy & paste]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[queja]]></category>
		<category><![CDATA[tutoriales]]></category>

		<guid isPermaLink="false">http://weblog.v-code.org/?p=96</guid>
		<description><![CDATA[Por favor, si quieres crear un tuto sobre &#8220;lo que sea&#8221;, no lo copies de la documentación original&#8230; que se acaba sabiendo!! Es algo que todos hemos hecho, ya sea por inexperiencia, por empezar, por no olvidar alguna lección valiosa&#8230; pero es que luego haces una búsqueda en Google y todos los resultados son calcados! [...]]]></description>
			<content:encoded><![CDATA[<p>Por favor, si quieres crear un tuto sobre &#8220;lo que sea&#8221;, no lo copies de la documentación original&#8230; que se acaba sabiendo!! <img src='http://weblog.v-code.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Es algo que todos hemos hecho, ya sea por inexperiencia, por empezar, por no olvidar alguna lección valiosa&#8230; pero es que luego haces una búsqueda en <a href="http://en.wikipedia.org/wiki/Google" target="_blank">Google</a> y todos los resultados son calcados! Y eso resulta frustrante. Frustrante porque no solucionas tu problema con un simple ejemplo, frustrante porque no encuentras &#8220;otras ideas&#8221; de cómo afrontar tu problema y frustrante porque ver el mismo ejemplo con diferentes colorcitos cansa, y mucho.</p>
<p>Por favor, si empiezas tu blog, si empiezas a aprender algún lenguaje de programación, si quieres aprender algo nuevo y que los demás también lo disfruten contigo. Gracias, pero no copies la documentación oficial. Haz tus propios ejemplos&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.v-code.net/2008/10/dont-copy-please/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

