<?xml version="1.0" encoding="iso-8859-1"?><!-- generator="b2evolution/3.3.3" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>jr-thies.de</title>
		<link>http://jr-thies.de/index.php</link>
		<atom:link rel="self" type="application/rss+xml" href="http://jr-thies.de/index.php?tempskin=_rss2" />
		<description>Homepage Jean-Ren&#233; Thies</description>
		<language>de-DE</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=3.3.3"/>
		<ttl>60</ttl>
				<item>
			<title>Labyrinthe bauen</title>
			<link>http://jr-thies.de/index.php/2010/01/31/title</link>
			<pubDate>Sun, 31 Jan 2010 19:26:06 +0000</pubDate>			<dc:creator>jrt</dc:creator>
			<category domain="main">Java</category>
<category domain="alt">Minigames</category>			<guid isPermaLink="false">91@http://jr-thies.de/</guid>
						<description>&lt;p&gt;Es ist erstaunlich einfach, ein Labyrinth zu bauen, und man findet dazu auch eine Menge Anleitungen. Ich m&amp;#246;chte hier die &lt;a href=&quot;http://www.mazeworks.com/mazegen/mazetut/index.htm&quot;&gt;Beschreibung von MazeWorks&lt;/a&gt; aufgreifen und in Java umsetzen.&lt;/p&gt;

&lt;p&gt;Im Rohzustand besteht das Labyrinth aus einer Anzahl von Zellen, die alle von vier W&amp;#228;nden begrenzt sind. Darin entstehen dann die G&amp;#228;nge, indem man an einer beliebigen Stelle startet und dann die folgenden Schritte so lange wiederholt, bis man in allen Zellen einmal gewesen ist:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;W&amp;#228;hle eine beliebige Nachbarzelle, in der Du noch nicht warst.&lt;/li&gt;
	&lt;li&gt;Wenn Du eine findest, dann entferne die Zwischenwand zu dieser Zelle und begebe Dich dorthin. Wenn Du keine solche Nachbarzelle findest, gehe zur&amp;#252;ck zur letzten besuchten Zelle.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Klingt ganz einfach, und die Umsetzung ist auch nicht schwer.&lt;/p&gt;
&lt;a href=&quot;http://jr-thies.de/index.php/2010/01/31/title#more91&quot;&gt;Mehr lesen &amp;raquo;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p>Es ist erstaunlich einfach, ein Labyrinth zu bauen, und man findet dazu auch eine Menge Anleitungen. Ich m&#246;chte hier die <a href="http://www.mazeworks.com/mazegen/mazetut/index.htm">Beschreibung von MazeWorks</a> aufgreifen und in Java umsetzen.</p>

<p>Im Rohzustand besteht das Labyrinth aus einer Anzahl von Zellen, die alle von vier W&#228;nden begrenzt sind. Darin entstehen dann die G&#228;nge, indem man an einer beliebigen Stelle startet und dann die folgenden Schritte so lange wiederholt, bis man in allen Zellen einmal gewesen ist:</p>
<ol>
	<li>W&#228;hle eine beliebige Nachbarzelle, in der Du noch nicht warst.</li>
	<li>Wenn Du eine findest, dann entferne die Zwischenwand zu dieser Zelle und begebe Dich dorthin. Wenn Du keine solche Nachbarzelle findest, gehe zur&#252;ck zur letzten besuchten Zelle.</li>
</ol>
<p>Klingt ganz einfach, und die Umsetzung ist auch nicht schwer.</p>
<a href="http://jr-thies.de/index.php/2010/01/31/title#more91">Mehr lesen &raquo;</a>]]></content:encoded>
								<comments>http://jr-thies.de/index.php/2010/01/31/title#comments</comments>
			<wfw:commentRss>http://jr-thies.de/index.php?tempskin=_rss2&#38;disp=comments&#38;p=91</wfw:commentRss>
		</item>
				<item>
			<title>Framework zum Spielen?</title>
			<link>http://jr-thies.de/index.php/2010/01/26/framework-zum-spielen</link>
			<pubDate>Tue, 26 Jan 2010 08:45:01 +0000</pubDate>			<dc:creator>jrt</dc:creator>
			<category domain="main">Project Plaza</category>
<category domain="alt">Java</category>
<category domain="alt">Tools</category>			<guid isPermaLink="false">90@http://jr-thies.de/</guid>
						<description>&lt;p&gt;&lt;p&gt;Gleich vorweg: Nein, das &lt;a href=&quot;http://www.playframework.org&quot;&gt;Play Framework&lt;/a&gt; dient nicht der Spieleprogrammierung. Es geht um ganz normale Webanwendungen, und zwar in Java. Damit bekommt die immer l&amp;#228;nger werdende Kette von Webframeworks eine weitere Perle angeh&amp;#228;ngt, und nach erster Betrachtung scheint es sich um ein sehr interessantes und sehenswertes Exemplar zu handeln! Jedenfalls, wenn man Wert auf eine flache Lernkurve, gute Toolunterst&amp;#252;tzung und Effizienz legt. Java sollte man schon beherrschen, aber viel mehr braucht man eigentlich nicht. &lt;/p&gt;

&lt;p&gt;Wenn ich ein neues Framework anschaue, frage ich mich zuerst, ob ich damit schneller zum Ergebnis komme als mit &lt;a href=&quot;http://www.grails.org&quot;&gt;Grails&lt;/a&gt;. Der n&amp;#228;chste wichtige Punkt ist, wie schnell sich &amp;#196;nderungen am Datenmodell und in der Benutzeroberfl&amp;#228;che vornehmen lassen (Erweiterung, Refactoring, Deployment). Und nicht zuletzt geht es auch darum, wie klar und &amp;#252;bersichtlich man den Quellcode strukturieren kann. Was erzwingt das Framework, was kann man nach eigenen Vorstellungen organisieren? &lt;/p&gt;
&lt;a href=&quot;http://jr-thies.de/index.php/2010/01/26/framework-zum-spielen#more90&quot;&gt;Mehr lesen &amp;raquo;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p><p>Gleich vorweg: Nein, das <a href="http://www.playframework.org">Play Framework</a> dient nicht der Spieleprogrammierung. Es geht um ganz normale Webanwendungen, und zwar in Java. Damit bekommt die immer l&#228;nger werdende Kette von Webframeworks eine weitere Perle angeh&#228;ngt, und nach erster Betrachtung scheint es sich um ein sehr interessantes und sehenswertes Exemplar zu handeln! Jedenfalls, wenn man Wert auf eine flache Lernkurve, gute Toolunterst&#252;tzung und Effizienz legt. Java sollte man schon beherrschen, aber viel mehr braucht man eigentlich nicht. </p>

<p>Wenn ich ein neues Framework anschaue, frage ich mich zuerst, ob ich damit schneller zum Ergebnis komme als mit <a href="http://www.grails.org">Grails</a>. Der n&#228;chste wichtige Punkt ist, wie schnell sich &#196;nderungen am Datenmodell und in der Benutzeroberfl&#228;che vornehmen lassen (Erweiterung, Refactoring, Deployment). Und nicht zuletzt geht es auch darum, wie klar und &#252;bersichtlich man den Quellcode strukturieren kann. Was erzwingt das Framework, was kann man nach eigenen Vorstellungen organisieren? </p>
<a href="http://jr-thies.de/index.php/2010/01/26/framework-zum-spielen#more90">Mehr lesen &raquo;</a>]]></content:encoded>
								<comments>http://jr-thies.de/index.php/2010/01/26/framework-zum-spielen#comments</comments>
			<wfw:commentRss>http://jr-thies.de/index.php?tempskin=_rss2&#38;disp=comments&#38;p=90</wfw:commentRss>
		</item>
				<item>
			<title>Eine tierische Basic-to-Java &#220;bersetzung</title>
			<link>http://jr-thies.de/index.php/2009/12/02/basic-to-java</link>
			<pubDate>Wed, 02 Dec 2009 16:56:50 +0000</pubDate>			<dc:creator>jrt</dc:creator>
			<category domain="alt">Site Seeing</category>
<category domain="main">Java</category>
<category domain="alt">Minigames</category>			<guid isPermaLink="false">88@http://jr-thies.de/</guid>
						<description>&lt;p&gt;K&amp;#252;rzlich habe ich zwei B&amp;#252;cher im Web wiedergefunden, die mich vor langer Zeit mal besch&amp;#228;ftigt haben: &lt;a href=&quot;http://www.atariarchives.org/basicgames/&quot;&gt;BASIC Computer Games&lt;/a&gt; und &lt;a href=&quot;http://www.atariarchives.org/morebasicgames/index.php&quot;&gt;More BASIC Computer Games&lt;/a&gt;. Alle Quellcodes sind als GIFs enthalten, so dass man genau wie fr&amp;#252;her abtippen muss. Sehr nostalgisch...&lt;br /&gt;
Dabei helfen die vielen GOTO-Anweisungen nicht gerade beim Verst&amp;#228;ndnis. Nach der Lekt&amp;#252;re von &lt;a href=&quot;http://www.amazon.de/Deutsche-Ausgabe-Refactoring-Patterns-Techniken/dp/3826655486/ref=sr_1_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1259773292&amp;amp;sr=8-3&quot;&gt;Clean Code&lt;/a&gt; tun einem die BASIC-Programme geradezu in den Augen weh - und das liegt nicht nur an der niedrigen Scanaufl&amp;#246;sung der GIFs. Programme sollten beim Durchlesen auch zu verstehen sein, und das mit m&amp;#246;glichst wenigen Kommentaren. &lt;br /&gt;
Ich habe eines der Spiele herausgepickt und in Java neu geschrieben. Gespielt wird in der Textkonsole, und als kleines Bonbon speichert das Programm seine gesammelten Erfahrungen am Ende des Spiels in eine &lt;a href=&quot;http://www.neodatis.org/&quot;&gt;Neodatis&lt;/a&gt;-Datenbank.&lt;/p&gt;
&lt;a href=&quot;http://jr-thies.de/index.php/2009/12/02/basic-to-java#more88&quot;&gt;Mehr lesen &amp;raquo;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p>K&#252;rzlich habe ich zwei B&#252;cher im Web wiedergefunden, die mich vor langer Zeit mal besch&#228;ftigt haben: <a href="http://www.atariarchives.org/basicgames/">BASIC Computer Games</a> und <a href="http://www.atariarchives.org/morebasicgames/index.php">More BASIC Computer Games</a>. Alle Quellcodes sind als GIFs enthalten, so dass man genau wie fr&#252;her abtippen muss. Sehr nostalgisch...<br />
Dabei helfen die vielen GOTO-Anweisungen nicht gerade beim Verst&#228;ndnis. Nach der Lekt&#252;re von <a href="http://www.amazon.de/Deutsche-Ausgabe-Refactoring-Patterns-Techniken/dp/3826655486/ref=sr_1_3?ie=UTF8&amp;s=books&amp;qid=1259773292&amp;sr=8-3">Clean Code</a> tun einem die BASIC-Programme geradezu in den Augen weh - und das liegt nicht nur an der niedrigen Scanaufl&#246;sung der GIFs. Programme sollten beim Durchlesen auch zu verstehen sein, und das mit m&#246;glichst wenigen Kommentaren. <br />
Ich habe eines der Spiele herausgepickt und in Java neu geschrieben. Gespielt wird in der Textkonsole, und als kleines Bonbon speichert das Programm seine gesammelten Erfahrungen am Ende des Spiels in eine <a href="http://www.neodatis.org/">Neodatis</a>-Datenbank.</p>
<a href="http://jr-thies.de/index.php/2009/12/02/basic-to-java#more88">Mehr lesen &raquo;</a>]]></content:encoded>
								<comments>http://jr-thies.de/index.php/2009/12/02/basic-to-java#comments</comments>
			<wfw:commentRss>http://jr-thies.de/index.php?tempskin=_rss2&#38;disp=comments&#38;p=88</wfw:commentRss>
		</item>
				<item>
			<title>Tutorial: Erste GUI-Anwendungen mit Scala</title>
			<link>http://jr-thies.de/index.php/2009/07/30/tutorial-erste-gui-anwendungen-mit-scala</link>
			<pubDate>Thu, 30 Jul 2009 12:12:30 +0000</pubDate>			<dc:creator>jrt</dc:creator>
			<category domain="main">Project Plaza</category>			<guid isPermaLink="false">87@http://jr-thies.de/</guid>
						<description>&lt;p&gt;Dank &lt;a href=&quot;http://booksites.artima.com/programming_in_scala&quot;&gt;Programming in Scala&lt;/a&gt; stellen sich nach und nach erste Erfolgserlebnisse mit dieser Programmiersprache ein, und sie macht alles in allem richtig Spa&amp;#223; &amp;#8211; obwohl die Unterst&amp;#252;tzung in den g&amp;#228;ngigen IDEs bislang nur rudiment&amp;#228;r ist. &lt;br /&gt;
Was mich besonders verbl&amp;#252;fft: Die extrem kompakte Art, mit Scala grafische Benutzeroberfl&amp;#228;chen auf Swing-Basis aufzubauen. Vorher hatte ich schon mit JavaFX und Groovy SwingBuilder experimentiert, aber keines von beiden war so &amp;#252;berzeugend. &lt;br /&gt;
Hier ein paar grundlegende Schritte zur GUI-Erzeugung.&lt;/p&gt;
&lt;a href=&quot;http://jr-thies.de/index.php/2009/07/30/tutorial-erste-gui-anwendungen-mit-scala#more87&quot;&gt;Mehr lesen &amp;raquo;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p>Dank <a href="http://booksites.artima.com/programming_in_scala">Programming in Scala</a> stellen sich nach und nach erste Erfolgserlebnisse mit dieser Programmiersprache ein, und sie macht alles in allem richtig Spa&#223; &#8211; obwohl die Unterst&#252;tzung in den g&#228;ngigen IDEs bislang nur rudiment&#228;r ist. <br />
Was mich besonders verbl&#252;fft: Die extrem kompakte Art, mit Scala grafische Benutzeroberfl&#228;chen auf Swing-Basis aufzubauen. Vorher hatte ich schon mit JavaFX und Groovy SwingBuilder experimentiert, aber keines von beiden war so &#252;berzeugend. <br />
Hier ein paar grundlegende Schritte zur GUI-Erzeugung.</p>
<a href="http://jr-thies.de/index.php/2009/07/30/tutorial-erste-gui-anwendungen-mit-scala#more87">Mehr lesen &raquo;</a>]]></content:encoded>
								<comments>http://jr-thies.de/index.php/2009/07/30/tutorial-erste-gui-anwendungen-mit-scala#comments</comments>
			<wfw:commentRss>http://jr-thies.de/index.php?tempskin=_rss2&#38;disp=comments&#38;p=87</wfw:commentRss>
		</item>
				<item>
			<title>Scala-Anwendungen au&#223;erhalb von Netbeans starten</title>
			<link>http://jr-thies.de/index.php/2009/04/20/scala-anwendungen-ausserhalb-von-netbean</link>
			<pubDate>Mon, 20 Apr 2009 08:29:52 +0000</pubDate>			<dc:creator>jrt</dc:creator>
			<category domain="main">Project Plaza</category>			<guid isPermaLink="false">86@http://jr-thies.de/</guid>
						<description>&lt;p&gt;Ein Stolperstein, auf den vermutlich jeder schnell trifft, der Scala mit Netbeans ausprobieren m&amp;#246;chte: Au&amp;#223;erhalb der IDE bekommt man beim Starten der produzierten JAR-Datei eine Fehlermeldung wie &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: scala/ScalaObject&lt;br /&gt;
        at java.lang.ClassLoader.defineClass1(Native Method)&lt;br /&gt;
		(...)&lt;br /&gt;
        ... 13 more&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Das kann man sehr leicht l&amp;#246;sen, indem man dem Netbeans-Projekt noch die Datei &quot;scala-library.jar&quot; als Library hinzuf&amp;#252;gt. Diese Datei befindet sich in &quot;lib&quot; im Installationsverzeichnis von Scala.&lt;br /&gt;
Wenn man das Scala-Projekt in Netbeans dann nochmal neu kompiliert, enth&amp;#228;lt auch das &quot;dist&quot;-Verzeichnis die Scala-Library und das Programm kann per Befehlszeile (z.B. java -jar &quot;ScalaApplication.jar&quot;) gestartet werden.&lt;/p&gt;</description>
			<content:encoded><![CDATA[<p>Ein Stolperstein, auf den vermutlich jeder schnell trifft, der Scala mit Netbeans ausprobieren m&#246;chte: Au&#223;erhalb der IDE bekommt man beim Starten der produzierten JAR-Datei eine Fehlermeldung wie </p>

<p><code>Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject<br />
        at java.lang.ClassLoader.defineClass1(Native Method)<br />
		(...)<br />
        ... 13 more</code></p>

<p>Das kann man sehr leicht l&#246;sen, indem man dem Netbeans-Projekt noch die Datei "scala-library.jar" als Library hinzuf&#252;gt. Diese Datei befindet sich in "lib" im Installationsverzeichnis von Scala.<br />
Wenn man das Scala-Projekt in Netbeans dann nochmal neu kompiliert, enth&#228;lt auch das "dist"-Verzeichnis die Scala-Library und das Programm kann per Befehlszeile (z.B. java -jar "ScalaApplication.jar") gestartet werden.</p>]]></content:encoded>
								<comments>http://jr-thies.de/index.php/2009/04/20/scala-anwendungen-ausserhalb-von-netbean#comments</comments>
			<wfw:commentRss>http://jr-thies.de/index.php?tempskin=_rss2&#38;disp=comments&#38;p=86</wfw:commentRss>
		</item>
				<item>
			<title>JPEG Resizer</title>
			<link>http://jr-thies.de/index.php/2009/04/04/jpeg-resizer</link>
			<pubDate>Sat, 04 Apr 2009 09:46:56 +0000</pubDate>			<dc:creator>jrt</dc:creator>
			<category domain="main">Project Plaza</category>
<category domain="alt">Java</category>			<guid isPermaLink="false">85@http://jr-thies.de/</guid>
						<description>&lt;p&gt;Neulich brauchte ich ein Java-Programm, um eine Menge JPEG-Dateien m&amp;#246;glichst schnell und automatisiert zu verkleinern. Dazu habe ich ein paar Code-Schnipsel aus verschiedenen Foren zusammengetragen und das hier daraus gemacht:&lt;/p&gt;
&lt;p class=&quot;amcode&quot;&gt;Code:&lt;/p&gt;&lt;div class=&quot;codeblock amc_code amc_long&quot;&gt;&lt;table&gt;&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;package jpegresizer;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import com.sun.image.codec.jpeg.JPEGCodec;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import com.sun.image.codec.jpeg.JPEGEncodeParam;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import com.sun.image.codec.jpeg.JPEGImageEncoder;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import java.awt.Graphics;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import java.awt.Image;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import java.awt.image.BufferedImage;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import java.io.File;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import java.io.FileOutputStream;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import java.io.IOException;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import javax.imageio.ImageIO;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;import javax.swing.ImageIcon;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;/**&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt; * JPEG Resizer&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt; * @author Jean-Ren&amp;#233; Thies&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt; */&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;public class Resizer {&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/**&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Resize a JPEG file and save it.&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Either the new width or the new heigth must be greater than zero.&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * If the width is greater than zero, the new height will be calculated.&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * If the width is zero and the height is greater than zero, the width will be calculated.&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; *&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * @param inputfile complete path to original jpeg file&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * @param outputfile complete save path&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * @param newWidth width in pixel&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * @param newHeight height in pixel&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * @return success of resize and save&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; */&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public static boolean resize(String inputfile, String outputfile, int newWidth, int newHeight) {&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (newWidth &amp;gt; 0 || newHeight &amp;gt; 0) {&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;try {&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Image img = new ImageIcon(ImageIO.read(new File(inputfile))).getImage();&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (newWidth &amp;gt; 0) {&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;float faktor = (float) newWidth / img.getWidth(null);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;newHeight = (int) (img.getHeight(null) * faktor);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;} else {&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;float faktor = (float) newHeight / img.getHeight(null);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;newWidth = (int) (img.getWidth(null) * faktor);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Image scaledImage = img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;BufferedImage outImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Graphics g = outImg.getGraphics();&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;g.drawImage(scaledImage, 0, 0, null);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;g.dispose();&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;JPEGImageEncoder jpegImageEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(outputfile));&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;JPEGEncodeParam param = jpegImageEncoder.getDefaultJPEGEncodeParam(outImg);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;param.setQuality(0.9F, true);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jpegImageEncoder.encode(outImg, param);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return true;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;} catch (IOException e) {&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;e.printStackTrace();&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return false;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;} else {&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return false;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Die &quot;resize&quot;-Methode nimmt den Pfad der Originaldatei und den der zu speichernden Datei an, au&amp;#223;erdem die gew&amp;#252;nschte Breite oder H&amp;#246;he - eine der beiden Angaben kann 0 sein, dann wird der andere Wert angenommen und entsprechend proportional skaliert. Die Bildqualit&amp;#228;t des Outputs ist in der Methode selbst anpassbar. &lt;br /&gt;
Wie die Importe zeigen, ist eine Java-Version von Sun n&amp;#246;tig.&lt;/p&gt;</description>
			<content:encoded><![CDATA[<p>Neulich brauchte ich ein Java-Programm, um eine Menge JPEG-Dateien m&#246;glichst schnell und automatisiert zu verkleinern. Dazu habe ich ein paar Code-Schnipsel aus verschiedenen Foren zusammengetragen und das hier daraus gemacht:</p>
<p class="amcode">Code:</p><div class="codeblock amc_code amc_long"><table><tr class="amc_code_odd"><td class="amc_line"><div class="amc1"></div></td><td><code><span class="amc_default">package jpegresizer;</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"></div></td><td><code>&nbsp;</code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"></div></td><td><code><span class="amc_default">import com.sun.image.codec.jpeg.JPEGCodec;</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"></div></td><td><code><span class="amc_default">import com.sun.image.codec.jpeg.JPEGEncodeParam;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"></div></td><td><code><span class="amc_default">import com.sun.image.codec.jpeg.JPEGImageEncoder;</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"></div></td><td><code><span class="amc_default">import java.awt.Graphics;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"></div></td><td><code><span class="amc_default">import java.awt.Image;</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"></div></td><td><code><span class="amc_default">import java.awt.image.BufferedImage;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"></div></td><td><code><span class="amc_default">import java.io.File;</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc1"></div></div></td><td><code><span class="amc_default">import java.io.FileOutputStream;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc1"></div></div></td><td><code><span class="amc_default">import java.io.IOException;</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc1"></div></div></td><td><code><span class="amc_default">import javax.imageio.ImageIO;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc1"></div></div></td><td><code><span class="amc_default">import javax.swing.ImageIcon;</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc1"></div></div></td><td><code>&nbsp;</code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc1"></div></div></td><td><code><span class="amc_default">/**</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"><div class="amc1"></div></div></td><td><code><span class="amc_default"> * JPEG Resizer</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"><div class="amc1"></div></div></td><td><code><span class="amc_default"> * @author Jean-Ren&#233; Thies</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"><div class="amc1"></div></div></td><td><code><span class="amc_default"> */</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"><div class="amc1"></div></div></td><td><code><span class="amc_default">public class Resizer {</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc2"></div></div></td><td><code>&nbsp;</code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc2"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;/**</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc2"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; * Resize a JPEG file and save it.</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc2"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; * Either the new width or the new heigth must be greater than zero.</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc2"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; * If the width is greater than zero, the new height will be calculated.</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc2"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; * If the width is zero and the height is greater than zero, the width will be calculated.</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"><div class="amc2"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; *</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"><div class="amc2"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; * @param inputfile complete path to original jpeg file</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"><div class="amc2"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; * @param outputfile complete save path</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"><div class="amc2"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; * @param newWidth width in pixel</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; * @param newHeight height in pixel</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; * @return success of resize and save</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160; */</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;public static boolean resize(String inputfile, String outputfile, int newWidth, int newHeight) {</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (newWidth &gt; 0 || newHeight &gt; 0) {</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try {</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Image img = new ImageIcon(ImageIO.read(new File(inputfile))).getImage();</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"><div class="amc3"></div></div></td><td><code>&nbsp;</code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (newWidth &gt; 0) {</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;float faktor = (float) newWidth / img.getWidth(null);</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc4"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newHeight = (int) (img.getHeight(null) * faktor);</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc4"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} else {</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc4"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;float faktor = (float) newHeight / img.getHeight(null);</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc4"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;newWidth = (int) (img.getWidth(null) * faktor);</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc4"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc4"></div></div></td><td><code>&nbsp;</code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"><div class="amc4"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Image scaledImage = img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"><div class="amc4"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BufferedImage outImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"><div class="amc4"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Graphics g = outImg.getGraphics();</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"><div class="amc4"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;g.drawImage(scaledImage, 0, 0, null);</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc5"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;g.dispose();</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc5"></div></div></td><td><code>&nbsp;</code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc5"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;JPEGImageEncoder jpegImageEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(outputfile));</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc5"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;JPEGEncodeParam param = jpegImageEncoder.getDefaultJPEGEncodeParam(outImg);</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc5"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;param.setQuality(0.9F, true);</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc5"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;jpegImageEncoder.encode(outImg, param);</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"><div class="amc5"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return true;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"><div class="amc5"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} catch (IOException e) {</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"><div class="amc5"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;e.printStackTrace();</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"><div class="amc5"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return false;</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc6"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc6"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} else {</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc6"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return false;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc6"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc6"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;}</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc6"></div></div></td><td><code><span class="amc_default">}</span></code></td></tr>
</table></div>

<p>Die "resize"-Methode nimmt den Pfad der Originaldatei und den der zu speichernden Datei an, au&#223;erdem die gew&#252;nschte Breite oder H&#246;he - eine der beiden Angaben kann 0 sein, dann wird der andere Wert angenommen und entsprechend proportional skaliert. Die Bildqualit&#228;t des Outputs ist in der Methode selbst anpassbar. <br />
Wie die Importe zeigen, ist eine Java-Version von Sun n&#246;tig.</p>]]></content:encoded>
								<comments>http://jr-thies.de/index.php/2009/04/04/jpeg-resizer#comments</comments>
			<wfw:commentRss>http://jr-thies.de/index.php?tempskin=_rss2&#38;disp=comments&#38;p=85</wfw:commentRss>
		</item>
				<item>
			<title>CatchUp - hinter den Kulissen</title>
			<link>http://jr-thies.de/index.php/2009/02/18/catchup-hinter-den-kulissen</link>
			<pubDate>Wed, 18 Feb 2009 19:53:31 +0000</pubDate>			<dc:creator>jrt</dc:creator>
			<category domain="main">Project Plaza</category>
<category domain="alt">Java</category>
<category domain="alt">Groovy &amp; Grails</category>			<guid isPermaLink="false">84@http://jr-thies.de/</guid>
						<description>&lt;p&gt;Das CatchUp-Projekt l&amp;#228;uft seit rund vier Monaten und ist mittlerweile bei Version 3.6 angekommen. Mit den letzten &amp;#196;nderungen hat der Podcast Reciever nochmal an Tempo und Stabilit&amp;#228;t zugelegt, gleichzeitig bin ich zwangsl&amp;#228;ufig an Erfahrungen reicher geworden. &lt;/p&gt;

&lt;p&gt;CatchUp ist stark auf Multithreading ausgelegt, und das bringt einige Herausforderungen mit sich. Wer sich daf&amp;#252;r interessiert, kann gerne mal einen Blick unter die Haube werfen und sich ein paar L&amp;#246;sungen anschauen.&lt;/p&gt;

&lt;a href=&quot;http://jr-thies.de/index.php/2009/02/18/catchup-hinter-den-kulissen#more84&quot;&gt;Mehr lesen &amp;raquo;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p>Das CatchUp-Projekt l&#228;uft seit rund vier Monaten und ist mittlerweile bei Version 3.6 angekommen. Mit den letzten &#196;nderungen hat der Podcast Reciever nochmal an Tempo und Stabilit&#228;t zugelegt, gleichzeitig bin ich zwangsl&#228;ufig an Erfahrungen reicher geworden. </p>

<p>CatchUp ist stark auf Multithreading ausgelegt, und das bringt einige Herausforderungen mit sich. Wer sich daf&#252;r interessiert, kann gerne mal einen Blick unter die Haube werfen und sich ein paar L&#246;sungen anschauen.</p>

<a href="http://jr-thies.de/index.php/2009/02/18/catchup-hinter-den-kulissen#more84">Mehr lesen &raquo;</a>]]></content:encoded>
								<comments>http://jr-thies.de/index.php/2009/02/18/catchup-hinter-den-kulissen#comments</comments>
			<wfw:commentRss>http://jr-thies.de/index.php?tempskin=_rss2&#38;disp=comments&#38;p=84</wfw:commentRss>
		</item>
				<item>
			<title>CatchUp released!</title>
			<link>http://jr-thies.de/index.php/2008/10/31/catchup-released</link>
			<pubDate>Fri, 31 Oct 2008 19:21:55 +0000</pubDate>			<dc:creator>jrt</dc:creator>
			<category domain="main">Project Plaza</category>
<category domain="alt">Java</category>
<category domain="alt">Groovy &amp; Grails</category>			<guid isPermaLink="false">82@http://jr-thies.de/</guid>
						<description>&lt;p&gt;&lt;img align=left hspace=5 vspace=5 src=&quot;http://jr-thies.de/media/blogs/all/runner_64.png&quot; /&gt;Die erste Version von &lt;a href=&quot;https://sourceforge.net/projects/catchuppodcastr/&quot;&gt;CatchUp&lt;/a&gt;, dem Groovy-/Java-basierten Podcast Reciever, kann jetzt bei sourceforge.net heruntergeladen werden. Der Sourcecode steht im &lt;a href=&quot;http://catchuppodcastr.svn.sourceforge.net/viewvc/catchuppodcastr/&quot;&gt;SVN Repository&lt;/a&gt; bereit.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Automatische Lautst&amp;#228;rkenanpassung m&amp;#246;glich, wenn &lt;a href=&quot;http://mp3gain.sourceforge.net/&quot;&gt;MP3Gain&lt;/a&gt; installiert ist.&lt;/li&gt;
  &lt;li&gt;&quot;One Way&quot; Synchronisation von lokalem Downloadverzeichnis zum MP3-Player.&lt;/li&gt;
  &lt;li&gt;Automatische Bereinigung von lokalem Verzeichnis und MP3-Player nach vorzugebender Anzahl von Tagen.&lt;/li&gt;
  &lt;li&gt;Beliebige Anzahl von Podcast-Abonnements.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CatchUp ben&amp;#246;tigt &lt;a href=&quot;http://java.sun.com/javase/downloads&quot;&gt;Java 1.6.0&lt;/a&gt; oder h&amp;#246;her.&lt;/p&gt;

&lt;p&gt;Bitte Fragen zum Programm im &lt;a href=&quot;https://sourceforge.net/forum/forum.php?forum_id=882406&quot;&gt;Hilfe-Forum&lt;/a&gt; stellen.&lt;/p&gt;</description>
			<content:encoded><![CDATA[<p><img align=left hspace=5 vspace=5 src="http://jr-thies.de/media/blogs/all/runner_64.png" />Die erste Version von <a href="https://sourceforge.net/projects/catchuppodcastr/">CatchUp</a>, dem Groovy-/Java-basierten Podcast Reciever, kann jetzt bei sourceforge.net heruntergeladen werden. Der Sourcecode steht im <a href="http://catchuppodcastr.svn.sourceforge.net/viewvc/catchuppodcastr/">SVN Repository</a> bereit.</p>

<p>Features:</p>
<ul>
  <li>Automatische Lautst&#228;rkenanpassung m&#246;glich, wenn <a href="http://mp3gain.sourceforge.net/">MP3Gain</a> installiert ist.</li>
  <li>"One Way" Synchronisation von lokalem Downloadverzeichnis zum MP3-Player.</li>
  <li>Automatische Bereinigung von lokalem Verzeichnis und MP3-Player nach vorzugebender Anzahl von Tagen.</li>
  <li>Beliebige Anzahl von Podcast-Abonnements.</li>
</ul>
<p>CatchUp ben&#246;tigt <a href="http://java.sun.com/javase/downloads">Java 1.6.0</a> oder h&#246;her.</p>

<p>Bitte Fragen zum Programm im <a href="https://sourceforge.net/forum/forum.php?forum_id=882406">Hilfe-Forum</a> stellen.</p>]]></content:encoded>
								<comments>http://jr-thies.de/index.php/2008/10/31/catchup-released#comments</comments>
			<wfw:commentRss>http://jr-thies.de/index.php?tempskin=_rss2&#38;disp=comments&#38;p=82</wfw:commentRss>
		</item>
			</channel>
</rss>
