<?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>/home/antu &#187; Vorschaubilder</title>
	<atom:link href="http://www.antusblog.de/tag/vorschaubilder/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.antusblog.de</link>
	<description>Linux, Programmierung und andere Dinge die mich interessieren</description>
	<lastBuildDate>Mon, 26 Oct 2009 06:00:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Video-Vorschau mit mplayerthumbs</title>
		<link>http://www.antusblog.de/2008/12/20/video-vorschau-mit-mplayerthumbs/</link>
		<comments>http://www.antusblog.de/2008/12/20/video-vorschau-mit-mplayerthumbs/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 16:32:54 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Dolphin]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Konqueror]]></category>
		<category><![CDATA[mplayer]]></category>
		<category><![CDATA[mplayerthumbs]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Vorschaubilder]]></category>

		<guid isPermaLink="false">http://antusblog.de/?p=247</guid>
		<description><![CDATA[Mplayerthumbs ist eine Erweiterung für Konqueror/Dolphin die Vorschaubilder von Videodateien erstellt. Die Bilder werden aus der Mitte der Videos entnommen (15-70%) und es wird auch darauf geachtet das der Kontrast der Bilder stimmt. Es werden also keine Bilder genommen auf denen nichts zu erkennen ist. Installation Es befindet sich ein ebuild im offiziellen Portage-Baum, das [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kde-apps.org/content/show.php?content=41180">Mplayerthumbs</a> ist eine Erweiterung für Konqueror/Dolphin die Vorschaubilder von Videodateien erstellt. Die Bilder werden aus der Mitte der Videos entnommen (15-70%) und es wird auch darauf geachtet das der Kontrast der Bilder stimmt. Es werden also keine Bilder genommen auf denen nichts zu erkennen ist.</p>
<p><a href="http://antusblog.de/wp-content/uploads/2008/12/dolphin.png"><img class="aligncenter size-full wp-image-257" title="Dolphin" src="http://antusblog.de/wp-content/uploads/2008/12/dolphin.png" alt="Vorschaubilder" width="500" height="274" /></a></p>
<p><span id="more-247"></span></p>
<h2>Installation</h2>
<p>Es befindet sich ein ebuild im offiziellen Portage-Baum, das ist jedoch für KDE 3.5, eine Version für KDE 4 befindet sich im kde-crazy-Overlay und wird einfach per <code>emerge -av mplayerthumbs:1</code> installiert (vorher evtl. demaskieren). Für OpenSUSE-Benutzer gibt es RPMs bei PackMan, einmal für <a href="http://packman.links2linux.de/package/mplayerthumbs">KDE 3</a> und einmal für <a href="http://packman.links2linux.de/package/kde4-mplayerthumbs">KDE 4</a>.</p>
<p>Ansonsten kann man es auch direkt aus dem Quelltext selbst kompilieren, wie das funktioniert steht in der README-Datei.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2008/12/20/video-vorschau-mit-mplayerthumbs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vorschaubild-Klasse</title>
		<link>http://www.antusblog.de/2008/11/29/php-vorschaubild-klasse/</link>
		<comments>http://www.antusblog.de/2008/11/29/php-vorschaubild-klasse/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 11:41:24 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Skripte und Klassen]]></category>
		<category><![CDATA[Klasse]]></category>
		<category><![CDATA[Vorschaubilder]]></category>

		<guid isPermaLink="false">http://antusblog.de/?p=116</guid>
		<description><![CDATA[Ich habe ja bereits eine Anleitung zum Erstellen von Vorschaubildern in PHP geschrieben, ich selbst verwende dazu eine selbst geschriebene Klasse. Was die Klasse kann Vorschaubilder von beliebiger Größe erstellen Das Seitenverhältnis der Vorschaubilder anpassen wenn erforderlich und gewünscht Einen Rahmen um das Vorschaubild zeichnen. Ein kleines Kästchen mit Informationen wie z.B. Dateigröße, Dateityp, o.Ä. [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe ja bereits eine <a href="index.php?p=24" target="_blank">Anleitung</a> zum Erstellen von Vorschaubildern in PHP geschrieben, ich selbst verwende dazu eine selbst geschriebene Klasse.</p>
<h2>Was die Klasse kann</h2>
<ul>
<li>Vorschaubilder von beliebiger Größe erstellen</li>
<li>Das Seitenverhältnis der Vorschaubilder anpassen wenn erforderlich und gewünscht</li>
<li>Einen Rahmen um das Vorschaubild zeichnen.</li>
<li>Ein kleines Kästchen mit Informationen wie z.B. Dateigröße, Dateityp, o.Ä. oben/unten anzeigen.</li>
<li>Die Transparenz und die Farben des Kästchens und der Schrift die Farbe des Hintergrunds und des Rahmens sowie die Dicke von letzterem lassen sich einfach ändern/anpassen.</li>
<li>Bei Fehlern werden Exceptions geworfen.</li>
</ul>
<p style="text-align: justify;"><span id="more-116"></span></p>
<h2>Die Klasse</h2>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> thumbnail_exception <span style="color: #000000; font-weight: bold;">extends</span> Exception <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> thumbnail <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$image_width</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">/* Width of the source image */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$image_height</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">/* Height of the source image */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$image_handle</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">/* Handle of the source image */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$image_path</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">/* Path of the source image */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$image_type</span><span style="color: #339933;">;</span>					<span style="color: #666666; font-style: italic;">/* Image type of the source image */</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$thumbnail_path</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">/* Path where the thumbnail should be saved */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$thumbnail_width</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">/* Desired thumbnail width */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$thumbnail_height</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">/* Desired thumbnail height */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$thumbnail_type</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">IMAGETYPE_BY_SOURCE</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">/* Desired image type of the thumbnail */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$thumbnail_final_width</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">/* Final width of the thumbnail picture */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$thumbnail_final_height</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">/* Final height of the thumbnail picture */</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$border_size</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">/* Border size */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$border_color</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;#000&quot;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">/* Border color */</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$background_color</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;#ccc&quot;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">/* Background color */</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$resize</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">/* Should the thumbnail be resized according to width:height ratio? */</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$quality</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">RESAMPLE</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">/* Quality of the thumbnail */</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$info_position</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">NO_INFO</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">/* Position of the information box, or if it should not be drawn &quot;NO_INFO&quot; */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$info_box_color</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;#000&quot;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">/* Color of the background of the information box */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$info_text_color</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;#FFF&quot;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">/* Text color of the information box */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$info_text</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">/* Text of the information box */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$info_transparency</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">/* Transparency of the information box */</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$info_size</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">16</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">/* Height of the information box */</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">const</span> RESIZE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>					<span style="color: #666666; font-style: italic;">/* Only resize, do not resample */</span>
	<span style="color: #000000; font-weight: bold;">const</span> RESAMPLE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>					<span style="color: #666666; font-style: italic;">/* Resample the image, slower but better quality */</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">const</span> IMAGETYPE_BY_SOURCE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">/* Choose thumbnail image type like source image type */</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">const</span> NO_INFO <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">const</span> TOP <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">const</span> BOTTOM <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> get_width<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_width</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;">function</span> get_height<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_height</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;">function</span> get_type<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_type</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">case</span> IMAGETYPE_GIF<span style="color: #339933;">:</span>  <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;GIF&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> IMAGETYPE_JPEG<span style="color: #339933;">:</span> <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;JPG&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> IMAGETYPE_PNG<span style="color: #339933;">:</span>  <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;PNG&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span> <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail_exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Image type not supported!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> get_filesize<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$fsize</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">/* The filesize function returns the file size in bytes. -&gt; convert value to Kibi/Mebibytes */</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$fsize</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">1048576</span><span style="color: #009900;">&#41;</span> 
			<span style="color: #b1b100;">return</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fsize</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">1048576</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; MiB&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">else</span>
			<span style="color: #b1b100;">return</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fsize</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">1024</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; KiB&quot;</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;">function</span> set_image<span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_path</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$path</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$info</span> <span style="color: #339933;">=</span> <span style="color: #990000;">getimagesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$info</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail_exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Image could not be read, is not an image or image type is not supported!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_width</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_type</span>   <span style="color: #339933;">=</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_type</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">case</span> IMAGETYPE_GIF<span style="color: #339933;">:</span>  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatefromgif</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> IMAGETYPE_JPEG<span style="color: #339933;">:</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatefromjpeg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> IMAGETYPE_PNG<span style="color: #339933;">:</span>  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatefrompng</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span> <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail_exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Image type not supported!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</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;">function</span> set_information_box<span style="color: #009900;">&#40;</span><span style="color: #000088;">$position</span><span style="color: #339933;">,</span> <span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$box_color</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;#000&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$text_color</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;#FFF&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$trans</span> <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: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$position</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">NO_INFO</span><span style="color: #339933;">:</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_position</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">NO_INFO</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">TOP</span><span style="color: #339933;">:</span>     <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_position</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">TOP</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">BOTTOM</span><span style="color: #339933;">:</span>  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_position</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">BOTTOM</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span> <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail_exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Position must be NO_INFO, TOP, or BOTTOM.&quot;</span><span style="color: #339933;">,</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: #666666; font-style: italic;">/* Checks if the desired information text fits into the thumbnail. */</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">calculate_info_text_pixels</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail_exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Text &quot;</span><span style="color: #000088;">$text</span><span style="color: #0000ff;">&quot; doesn't fit into image.&quot;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_text</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$text</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_box_color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$box_color</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_text_color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$text_color</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$trans</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$trans</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">127</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail_exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Transparency must be a number between 0 and 127.&quot;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_transparency</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$trans</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</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;">function</span> set_dimensions<span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span> <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$height</span> <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail_exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;The desired thumbnail width and height must be above 0.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$width</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$height</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</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;">function</span> set_image_type<span style="color: #009900;">&#40;</span><span style="color: #000088;">$type</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$type</span> <span style="color: #339933;">!=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">IMAGETYPE_BY_SOURCE</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$type</span> <span style="color: #339933;">!=</span> IMAGETYPE_GIF <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$type</span> <span style="color: #339933;">!=</span> IMAGETYPE_PNG <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$type</span> <span style="color: #339933;">!=</span> IMAGETYPE_JPEG<span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail_exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Image type not supported.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_type</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$type</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</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;">function</span> set_destination_path<span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_path</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$path</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</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;">function</span> set_border<span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #339933;">,</span> <span style="color: #000088;">$color</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail_exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Border size must be 0 or higher.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$size</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$color</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</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;">function</span> set_resize<span style="color: #009900;">&#40;</span><span style="color: #000088;">$resize</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resize</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$resize</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</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;">function</span> set_background_color<span style="color: #009900;">&#40;</span><span style="color: #000088;">$color</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">background_color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$color</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</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;">function</span> set_quality<span style="color: #009900;">&#40;</span><span style="color: #000088;">$quality</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">quality</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$quality</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</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;">function</span> create_thumbnail<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">/* Remember values, because if the image gets resized, they would change. */</span>
		<span style="color: #000088;">$tw_backup</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$th_backup</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">/* Calculate the final dimensions of the resized image. These values are not the final size of the thumbnail picture,
		 * only the dimensions of the resized image! */</span>
		<span style="color: #000088;">$total_height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$total_width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">/* If the information box is drawn, and it is drawn not inside the thumbnail picture, adjust height value. */</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_position</span> <span style="color: #339933;">!=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">NO_INFO</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_transparency</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> 
			<span style="color: #000088;">$total_height</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_size</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">/* If the source image is wider than high, recalculate final height to fit aspect ratio. Otherwise recalculate
		 * the width. */</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_width</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_height</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$total_width</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_height</span> <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_height</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_width</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$total_width</span><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: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$total_height</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_width</span>  <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_width</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_height</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$total_height</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;">/* If the thumbnail should get resized according to the aspect ratio (so there is no unfilled space or background
		 * in the final thumbnail) the values for the final size of the thumbnail picture get adjusted. */</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resize</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_width</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_height</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">/* Again, if the information box is drawn, and it is drawn not inside the thumbnail picture, adjust height 
			 * value. */</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_position</span> <span style="color: #339933;">!=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">NO_INFO</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_transparency</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> 
				<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span> <span style="color: #339933;">+=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_size</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatetruecolor</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">draw_background</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">draw_thumbnail</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">draw_border</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">draw_info</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_type</span> <span style="color: #339933;">==</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">IMAGETYPE_BY_SOURCE</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_type</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_type</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_type</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">case</span> IMAGETYPE_PNG<span style="color: #339933;">:</span> <span style="color: #990000;">imagepng</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> IMAGETYPE_GIF<span style="color: #339933;">:</span> <span style="color: #990000;">imagegif</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> IMAGETYPE_JPEG<span style="color: #339933;">:</span> <span style="color: #990000;">imagejpeg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">/* Now restore the desired thumbnail dimensions, this is needed if more than one thumbnail is generated using the same
		 * class instance. */</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tw_backup</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$th_backup</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> draw_border<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$border_color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allocate_color_from_hex</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_color</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
			<span style="color: #990000;">imagerectangle</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span> <span style="color: #000088;">$i</span><span style="color: #339933;">,</span> <span style="color: #000088;">$i</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$border_color</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;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> draw_thumbnail<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_transparency</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_position</span> <span style="color: #339933;">!=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">NO_INFO</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000088;">$tr</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_size</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #000088;">$tr</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000088;">$sx</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_width</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$sy</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_height</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$tr</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_position</span> <span style="color: #339933;">==</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">TOP</span><span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$sy</span> <span style="color: #339933;">+=</span> <span style="color: #000088;">$tr</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sx</span><span style="color: #339933;">,</span><span style="color: #000088;">$sy</span><span style="color: #339933;">,</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_height</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">quality</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">RESIZE</span><span style="color: #339933;">:</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_resize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sx</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sy</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">RESAMPLE</span><span style="color: #339933;">:</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_resample</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sx</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sy</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span> <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail_exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Quality can only be one of these: QUALITY_RESIZE, QUALITY_RESAMPLE.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> draw_background<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">imagefill</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allocate_color_from_hex</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">background_color</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: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> draw_info<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">/* Don't draw information box if it would take over the half of the image. */</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_size</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_position</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">NO_INFO</span><span style="color: #339933;">:</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">TOP</span><span style="color: #339933;">:</span>    <span style="color: #000088;">$position_y</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">/* minus border size (the border at the top), the size of the info bar and 1 (because drawing starts at position 0) */</span>
			<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">BOTTOM</span><span style="color: #339933;">:</span> <span style="color: #000088;">$position_y</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_height</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_size</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000088;">$position_x</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$text_x</span> <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">border_size</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">calculate_info_text_pixels</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_text</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">/* Activate alpha blending when transparency is used. */</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_transparency</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
			<span style="color: #990000;">imagealphablending</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$bkg_color</span> <span style="color: #339933;">=</span>  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allocate_color_from_hex</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_box_color</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_transparency</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$text_color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allocate_color_from_hex</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_text_color</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_transparency</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #990000;">imagefilledrectangle</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span> <span style="color: #000088;">$position_x</span><span style="color: #339933;">,</span> <span style="color: #000088;">$position_y</span><span style="color: #339933;">,</span> 
				     <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_width</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$position_x</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$position_y</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_size</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bkg_color</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">imagestring</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #000088;">$text_x</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$position_y</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info_text</span><span style="color: #339933;">,</span> <span style="color: #000088;">$text_color</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;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> image_resize<span style="color: #009900;">&#40;</span><span style="color: #000088;">$sx</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sy</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">imagecopyresized</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span>
				 <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_handle</span><span style="color: #339933;">,</span>
				 <span style="color: #000088;">$sx</span><span style="color: #339933;">,</span>
				 <span style="color: #000088;">$sy</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
				 <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_width</span><span style="color: #339933;">,</span>
				 <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_height</span><span style="color: #339933;">,</span>
				 <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_height</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;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> image_resample<span style="color: #009900;">&#40;</span><span style="color: #000088;">$sx</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sy</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">imagecopyresampled</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span>
				   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_handle</span><span style="color: #339933;">,</span>
				   <span style="color: #000088;">$sx</span><span style="color: #339933;">,</span>
				   <span style="color: #000088;">$sy</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
				   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_width</span><span style="color: #339933;">,</span>
				   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_final_height</span><span style="color: #339933;">,</span>
				   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">image_height</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;">function</span> allocate_color_from_hex<span style="color: #009900;">&#40;</span><span style="color: #000088;">$hex</span><span style="color: #339933;">,</span> <span style="color: #000088;">$trans</span> <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: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$hex</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$hex</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'#'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$hex</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$hex</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$hex</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$hex</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$hex</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$hex</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$red</span>   <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$hex</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$green</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$hex</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$blue</span>  <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$hex</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$trans</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #990000;">imagecolorallocate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span> <span style="color: #000088;">$red</span><span style="color: #339933;">,</span> <span style="color: #000088;">$green</span><span style="color: #339933;">,</span> <span style="color: #000088;">$blue</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #990000;">imagecolorallocatealpha</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">thumbnail_handle</span><span style="color: #339933;">,</span> <span style="color: #000088;">$red</span><span style="color: #339933;">,</span> <span style="color: #000088;">$green</span><span style="color: #339933;">,</span> <span style="color: #000088;">$blue</span><span style="color: #339933;">,</span> <span style="color: #000088;">$trans</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;">function</span> calculate_info_text_pixels<span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">7</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<h2>Verwendung</h2>
<p>Hier ein kleines Beispiel das zeigt wie man ein Vorschaubild mit einem Rahmen und ohne Info-Kästchen erstellt. Zu erst wird eine neue Instanz der thumbnail-Klasse erstellt, dann wird mit den set_-Befehlen festgelegt wo das Vorschaubild gespeichert wird, wie der Rahmen aussehen soll etc.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Ein einfaches Vorschaubild ohne Info-Box erstellen */</span>
<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;thumbnail/thumbnail.class.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
try <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">/* Eine neue Instanz der Vorschaubild-Klasse erstellen */</span>
	<span style="color: #000088;">$thumb</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> thumbnail<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;">/* Festlegen von welchem Bild ein Vorschaubild erstellt werden soll */</span>
	<span style="color: #000088;">$thumb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_image</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ausgangsbild.png&quot;</span><span style="color: #009900;">&#41;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">/* Wo das Vorschaubild gespeichert werden soll */</span>
	      <span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_destination_path</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;vorschaubild.png&quot;</span><span style="color: #009900;">&#41;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">/* 1 Pixel breiter schwarzer (#000) Rahmen */</span>
	      <span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_border</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;#000&quot;</span><span style="color: #009900;">&#41;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">/* Das Bild soll schnell aber mit niedrigerer Qualitaet verkleinert werden */</span>
	      <span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_quality</span><span style="color: #009900;">&#40;</span>thumbnail<span style="color: #339933;">::</span><span style="color: #004000;">RESIZE</span><span style="color: #009900;">&#41;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">/* Legt fest in welchem Bildformat (PNG, JPEG, GIF) das Vorschaubild
	 * gespeichert werden soll, bei IMAGETYPE_BY_SOURCE wird das Bildformat
	 * vom Quellbild genommen */</span>
	      <span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_image_type</span><span style="color: #009900;">&#40;</span>thumbnail<span style="color: #339933;">::</span><span style="color: #004000;">IMAGETYPE_BY_SOURCE</span><span style="color: #009900;">&#41;</span>
	<span style="color: #666666; font-style: italic;">/* Keine Info-Box anzeigen */</span>
	      <span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_information_box</span><span style="color: #009900;">&#40;</span>thumbnail<span style="color: #339933;">::</span><span style="color: #004000;">NO_INFO</span><span style="color: #009900;">&#41;</span>
	<span style="color: #666666; font-style: italic;">/* Vorschaubild erstellen */</span>
	      <span style="color: #339933;">-&gt;</span><span style="color: #004000;">create_thumbnail</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
catch <span style="color: #009900;">&#40;</span>thumbnail_exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">/* Fehler ausgeben falls einer aufgetreten ist */</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Fehler: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</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: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Wenn bei der Erstellung des Vorschaubildes irgendetwas schief läuft wird eine Exception geworfen, die Fehlermeldung kann dann per getMessage() abgerufen werden.</p>
<p>Zu den einzelnen Funktionen/Einstellungsmöglichkeiten:</p>
<h3>set_image($pfad)</h3>
<p>Bestimmt das Bild, von dem ein Vorschaubild erstellt werden soll. Der Parameter $pfad gibt den Pfad zum Bild bzw. den Dateinamen an.</p>
<h3>set_dimensions($breite, $hoehe)</h3>
<p>Legt fest wie groß das Vorschaubild sein soll.</p>
<h3>set_image_type($bildformat)</h3>
<p>Diese Funktion legt fest in welchem Format das Vorschaubild abgespeichert werden soll, mögliche Bildformate sind:</p>
<ul>
<li>IMAGETYPE_GIF (.gif)</li>
<li>IMAGETYPE_PNG (.png)</li>
<li>IMAGETYPE_JPEG (.jpg/.jpeg)</li>
<li>IMAGETYPE_BY_SOURCE (Das Vorschaubild wird im selben Format wie das Ausgangsbild abgespeichert)</li>
</ul>
<p>Andere Bildformate als GIF/PNG/JPEG werden nicht unterstützt.</p>
<h3>set_destination_path($pfad)</h3>
<p>Legt fest unter welchem Dateinamen/Pfad das Vorschaubild abgespeichert werden soll.</p>
<h3>set_border($dicke, $farbe)</h3>
<p>Mit set_border lässt sich einstellen ob ein Rahmen gezeichnet werden soll (Kein Rahmen: $dicke = 0), wie dick er sein soll und welche Farbe er hat. Die Farbe wird als HTML-Farbcode angegeben, z.B. #000000 für Schwarz.</p>
<h3>set_resize($anpassen)</h3>
<p>Das Vorschaubild kann in seiner Größe an das Seitenverhältnis angepasst werden. Ist das Ausgangsbild z.B. sehr breit aber hat nur eine geringe Höhe, wird die Höhe des Vorschaubildes entsprechend angepasst (set_resize(true)), ansonsten wird die freie Fläche mit der Hintergrundfarbe aufgefüllt (set_resize(false)).</p>
<h3>set_background_color($farbe)</h3>
<p>Legt die Hintergrundfarbe vom Vorschaubild fest (siehe set_resize).</p>
<h3>set_quality($qualitaet)</h3>
<p><a href="http://antusblog.de/wp-content/uploads/2008/11/thumbnail_resample.png"><img class="alignright size-full wp-image-121" title="set_quality(thumbnail::RESAMPLE);" src="http://antusblog.de/wp-content/uploads/2008/11/thumbnail_resample.png" alt="" width="130" height="130" /></a><a href="http://antusblog.de/wp-content/uploads/2008/11/thumbnail_resize.png"><img class="size-full wp-image-120 alignleft" title="set_quality(thumbnail::RESIZE);" src="http://antusblog.de/wp-content/uploads/2008/11/thumbnail_resize.png" alt="" width="130" height="130" /></a><br />
PHP bietet zwei Funktionen zum vergrößern/verkleinern von Bildern an, einmal imagecopyresized und einmal imagecopyresampled. Letzteres erzeugt schönere Ergebnisse, ist aber ungefähr 400% langsamer. set_quality legt fest ob imagecopyresized (thumbnail::RESIZE) oder imagecopyresampled (thumbnail::RESAMPLE) verwendet werden soll.</p>
<h3>set_information_box($position, $text, $kaestchenfarbe, $textfarbe, $transparenz)</h3>
<p><a href="http://antusblog.de/wp-content/uploads/2008/11/thumbnail_top.png"><img class="alignright size-full wp-image-122" title="thumbnail::TOP" src="http://antusblog.de/wp-content/uploads/2008/11/thumbnail_top.png" alt="" width="130" height="130" /></a><a href="http://antusblog.de/wp-content/uploads/2008/11/thumbnail_bottom.png"><img class="alignright size-full wp-image-123" title="thumbnail::BOTTOM" src="http://antusblog.de/wp-content/uploads/2008/11/thumbnail_bottom.png" alt="" width="130" height="130" /></a>Man kann am unteren oder oberen Rand des Vorschaubilds ein kleines Kästchen mit Informationen über das Bild anzeigen lassen. $position legt fest ob das Kästchen oben (thumbnail::TOP), unten (thumbnail::BOTTOM) oder gar nicht (thumbnail::NO_INFO) angezeigt werden soll. $text ist der Text der im Kästchen stehen soll, ist dieser zu lang und passt nicht ins Bild wird eine Exception geworfen. Meistens will man im Kästchen Informationen über das Ausgangsbild anzeigen, folgende 4 Funktionen erleichtern das:</p>
<ul>
<li>get_width &#8211; Gibt die Breite des Ausgangsbilds zurück</li>
<li>get_height &#8211; Gibt die Höhe zurück</li>
<li>get_type &#8211; Gibt das Bildformat zurück (GIF/PNG/JPG)</li>
<li>get_filesize &#8211; Die Dateigröße in KiB/MiB (z.B. &#8220;123 KiB&#8221;, &#8220;2.45 MiB&#8221;)</li>
</ul>
<p>$kaestchenfarbe und $textfarbe bestimmen die Farbe, $transparenz die Transparenz des Kästchens/der Schrift. Die Farben werden als HTML-Farbcodes angegeben (z.B. #123456), die Transparenz als Zahl zwischen 0 (keine Transparenz) und 127 (100% transparent/unsichtbar).</p>
<h3>create_thumbnail()</h3>
<p>Erstellt das Vorschaubild und speichert es unter der mit set_destination_path angegebenen Ziel-Adresse ab.</p>
<h2>Abschließendes</h2>
<p>Wenn ihr die Klasse gebrauchen könnt, könnt ihr sie gerne verwenden. Ich übernehm aber keine Garantie dafür das sie fehlerfrei ist. <img src='http://www.antusblog.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Über Kritik/Verbesserungsvorschläge würde ich mich freuen, schreibt doch einfach einen Kommentar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2008/11/29/php-vorschaubild-klasse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vorschaubilder erstellen</title>
		<link>http://www.antusblog.de/2008/10/13/php-vorschaubilder-erstellen/</link>
		<comments>http://www.antusblog.de/2008/10/13/php-vorschaubilder-erstellen/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 19:03:59 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Vorschaubilder]]></category>

		<guid isPermaLink="false">http://antu.bplaced.net/?p=9</guid>
		<description><![CDATA[Ein Bild sagt mehr als tausend Worte. Aber viele Bilder verbrauchen viel Traffic, wäre es nicht besser wenn nur die Bilder übertragen werden müssen, die der Benutzer auch wirklich sehen will? Und würden kleine Vorschaubilder in Bildergalerien oder Foren nicht auch die Übersichtlichkeit erhöhen? Ja. Und genau deshalb erzeugen die meisten Bildergalerien und Bilderhoster diese [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://antusblog.de/wp-content/uploads/2008/10/vorschaubild.png"><img class="size-full wp-image-10" title="Vorschaubild 1" src="http://antusblog.de/wp-content/uploads/2008/10/vorschaubild.png" alt="" width="120" height="85" /></a> <a href="http://antusblog.de/wp-content/uploads/2008/10/vorschaubild-2.png"><img class="size-full wp-image-11" title="Vorschaubild 2" src="http://antusblog.de/wp-content/uploads/2008/10/vorschaubild-2.png" alt="" width="120" height="80" /></a> <a href="http://antusblog.de/wp-content/uploads/2008/10/vorschaubild-3.png"><img class="size-full wp-image-12" title="Vorschaubild 3" src="http://antusblog.de/wp-content/uploads/2008/10/vorschaubild-3.png" alt="" width="120" height="80" /></a></p>
<p>Ein Bild sagt mehr als tausend Worte. Aber viele Bilder verbrauchen viel Traffic, wäre es nicht besser wenn nur die Bilder übertragen werden müssen, die der Benutzer auch wirklich sehen will? Und würden kleine Vorschaubilder in Bildergalerien oder Foren nicht auch die Übersichtlichkeit erhöhen?</p>
<p>Ja. Und genau deshalb erzeugen die meisten Bildergalerien und Bilderhoster diese kleinen Vorschaubilder, auch Thumbnails genannt. In dieser Anleitung möchte ich erklären wie man solche Vorschaubilder in PHP erstellen kann.</p>
<p><strong>Wichtig:</strong> Diese Anleitung setzt grundlegende Kenntnisse über PHP voraus. (Grundlagen, Bedingungen, Variablen, Funktionen)</p>
<p><span id="more-24"></span></p>
<h2>Funktionsweise</h2>
<p>Im Grunde ist das Ganze recht einfach. Das PHP-Skript öffnet das Originalbild und erstellt ein kleines Bild, welches z.B. nur 100&#215;100 Pixel groß ist. Dann wird das Originalbild auf die Größe des kleinen Vorschaubilds geschrumpft und in dieses eingefügt. Jetzt könnte man noch einen Rahmen um das Vorschaubild zeichnen. Oder einen kleinen schwarzen Balken mit Informationen über die Dateigröße oder die Auflösung des Originalbilds einfügen. In dieser Anleitung werde ich der Einfachheit halber nicht darauf eingehen wie man mittels HTML/PHP Bilder hochladen kann, sondern nur darauf wie man die Vorschaubilder erstellt.</p>
<h2>Informationen über das Bild ermitteln</h2>
<p>Gehen wir mal davon aus das das Originalbild bereits auf dem Server gespeichert ist. Zuerst einmal muss herausgefunden werden welche Auflösung das Originalbild hat, und um welches Bildformat (PNG, JPEG, GIF, &#8230;) es sich handelt. Hier bietet sich die Funktion <a href="http://de.php.net/manual/de/function.getimagesize.php" target="_blank">getimagesize(string $filename [, array &amp;$imageinfo])</a> an. Die Funktion ermittelt Breite, Höhe und mime-Typ des Bildes. Die Funktion kann noch einige weitere Informationen liefern, diese sind aber erstmal unwichtig.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$originalbild</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;bilder/bild.png&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$informationen</span> <span style="color: #339933;">=</span> <span style="color: #990000;">getimagesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$original_dateiname</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$informationen</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">FALSE</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$informationen</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$informationen</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Fehler beim Ermitteln der Bildauflösung!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$breite</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$informationen</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$hoehe</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$informationen</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$format</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$informationen</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'mime'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Wenn beim Ermitteln der Informationen ein Fehler auftritt gibt getimagesize() FALSE zurück. Wenn die Funktion nicht in der Lage ist die Auflösung des Bildes herauszufinden liefert sie als Breite und Höhe jeweils den Wert 0. Sollte einer dieser Fehler auftreten wird eine Fehlermeldung ausgegeben und die Ausführung des Skripts abgebrochen (throw new Exception(&#8230;)). Wenn kein Fehler aufgetreten ist werden Breite, Höhe und Bildformat in $breite, $hoehe und $format gespeichert.</p>
<p><strong>Was ist ein mime-Typ?</strong><br />
Multipurpose Internet Mail Extensions, kurz MIME ermöglicht es bei Übertragungen im Internet festzulegen welches Format die übertragenen Daten haben, z.B. Bilder, Filme, Text, etc.<br />
Mehr Informationen zu MIME finden sich bei <a href="http://de.wikipedia.org/wiki/Multipurpose_Internet_Mail_Extensions" target="_blank">Wikipedia</a>.</p>
<p><strong>Was hat es mit diesem throw new Exception(&#8230;) auf sich?</strong><br />
Exceptions, zu deutsch Ausnahmen, sind eine Möglichkeit der Fehlerbehandlung. Man umschließt den Quelltext einfach mit einem try { &lt;Quelltext } catch (Exception $e) { &lt;Fehlerbehandlung&gt; }. Wenn ein Fehler auftritt wirft man einfach eine Ausnahme mit throw new Exception(&#8220;Fehlermeldung&#8221;);, der Quelltext danach wird dann nicht mehr ausgeführt, PHP springt direkt zum catch-Block und führt die entsprechende Fehlerbehandlung aus.</p>
<p>Mehr Informationen zur Ausnahmebehandlung mit Exceptions finden sich im <a href="http://de.php.net/manual/de/language.exceptions.php" target="_blank">PHP Handbuch</a>.</p>
<h2>Originalbild öffnen</h2>
<p>Jetzt wo das Bildformat bekannt ist, kann das Bild auch geöffnet und damit gearbeitet werden, jedenfalls wenn das Dateiformat unterstützt wird. In einer switch-Bedingung werden nun die 4 häufigsten Bildformate abgefragt und die entsprechende Funktion sie zu öffnen aufgerufen. PHP unterstützt noch ein paar weitere Formate, diese 3 sind aber die am häufigsten verwendeten. Wenn das Bild ein anderes Format hat wird wieder die Ausführung des Skripts abgebrochen und eine Fehlermeldung ausgegeben.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$format</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">&quot;image/gif&quot;</span><span style="color: #339933;">:</span> <span style="color: #000088;">$originalbild</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatefromgif</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$original_dateiname</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">&quot;image/jpeg&quot;</span><span style="color: #339933;">:</span> <span style="color: #000088;">$originalbild</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatefromjpeg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$original_dateiname</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">&quot;image/png&quot;</span><span style="color: #339933;">:</span> <span style="color: #000088;">$originalbild</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatefrompng</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$original_dateiname</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span> <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Bildformat nicht unterstützt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Verhältnis Höhe/Breite berechnen</h2>
<p>Damit das Bild beim verkleinern nicht gestreckt wird, muss nun das Verhältnis zwischen Höhe und Breite ausgerechnet werden, um die die Größe des Vorschaubilds entsprechend anzupassen. Erstmal werden Höhe und Breite auf je 100 Pixel festgelegt, diese Werte können natürlich höher/niedriger gesetzt werden, je nachdem wie groß das Vorschaubild sein soll. Dann wird das Verhältnis zwischen Höhe/Breite des Originalbilds berechnet in dem die Höhe durch die Breite respektive die Breite durch die Höhe geteilt wird. Wenn das Bild breiter als hoch ist ($breite_verhaeltnis &gt; $hoehe_verhaeltnis), wird die Höhe, ansonsten die Breite angepasst. Um die Höhe anzupassen wird die gewünschte Höhe des Vorschaubilds durch das Verhältnis der Breite zur Höhe geteilt. Anschließend wird das Ergebnis mithilfe der Funktion <a href="http://de.php.net/manual/de/function.ceil.php" target="_blank">ceil(float $value)</a> gerundet, da es keine halben Pixel gibt. <img src='http://www.antusblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Die Breite wird genau so berechnet, nur mit anderen Werten.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$breite_verhaeltnis</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$breite</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$hoehe</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$hoehe_verhaeltnis</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$hoehe</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$breite</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$breite_verhaeltnis</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$hoehe_verhaeltnis</span><span style="color: #009900;">&#41;</span>
<span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">=</span> <span style="color: #990000;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$breite_verhaeltnis</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #000088;">$vorschau_breite</span>  <span style="color: #339933;">=</span> <span style="color: #990000;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$hoehe_verhaeltnis</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h2>Vorschaubild erstellen und Rahmen zeichnen</h2>
<p>Jetzt kann das Vorschaubild erstellt werden, und zwar mit der Funktion <a href="http://de.php.net/manual/de/function.imagecreatetruecolor.php" target="_blank">imagecreatetruecolor(int $width, int $height)</a>. Warum imagecreatetruecolor und nicht imagecreate? Weil bei Bildern die mit imagecreate erzeugt wurden nur 256 Farben zur Verfügung stehen. Bei GIF-Bildern ist das egal, bei PNG, JPEG o.Ä. aber nicht. Wenn das Bild nicht erstellt werden konnte gibt imagecreatetruecolor FALSE zurück, in dem Fall wird wieder einfach eine Exception geworfen.</p>
<p>Um den Rahmen um das Vorschaubild zu zeichnen muss man erst die Farbe die man verwenden will bestimmen, dafür benutzt man die Funktion <a href="http://de.php.net/manual/de/function.imagecolorallocate.php" target="_blank">imagecolorallocate(resource $im, int $red, int $green, int $blue)</a>. Diese Funktion gibt einen Bezeichner zurück unter dem die Farbe aufrufbar ist. Zu den Parametern der Funktion ist zu sagen: Der erste Parameter ist das Bild für welches die Farbe bestimmt ist, in diesem Fall $vorschaubild, die anderen 3 Parameter bestimmen den Rot/Grün/Blau-Anteil der Farbe (0-255).</p>
<p>Der Rahmen wird letztendlich mit der Funktion zum Zeichnen von Rechtecken <a href="http://de.php.net/manual/de/function.imagerectangle.php" target="_blank">imagerectangle(resource $im, int $x1, int $y1, int $x2, $int y2, int $col)</a> gezeichnet. $im ist wieder das Bild in das gezeichnet werden soll, $x1 bzw. $y1 stellen die linke obere Koordinate, $x2 und $y2 die rechte untere Koordinate dar. Mit $col bestimmt man die Farbe des Rechtecks. Als Startkoordinate wird 0|0 verwendet, als Endkoordinate $vorschau_breite &#8211; 1|$vorschau_hoehe &#8211; 1. Minus 1 weil man in der Programmierung meistens bei 0 anfängt zu zählen und unser Bild sozusagen 0-99 Pixel breit und 0-99 Pixel hoch ist.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$vorschaubild</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatetruecolor</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschau_breite</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_hoehe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$vorschaubild</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Fehler beim Erstellen des Vorschaubilds!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$rahmenfarbe</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecolorallocate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">imagerectangle</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$rahmenfarbe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h2>Originalbild schrumpfen und ins Vorschaubild einfügen</h2>
<p>Nun muss das Originalbild so weit verkleinert werden damit es in das Vorschaubild reinpasst. Dazu gibt es die Funktionen <a href="http://de.php.net/manual/de/function.imagecopyresampled.php" target="_blank">imagecopyresampled(resource $dst_image, resource $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h)</a> und <a href="http://de.php.net/manual/de/function.imagecopyresized.php" target="_blank">imagecopyresized(resource $dst_im, resource $src_im, int $dstX, int $dstY, int $srcX, int $srcY, int $dstW, int $dst_H, int $src_W, int $src_H)</a>. Der erste Parameter legt fest in welches Bild das verkleinerte Bild geschrieben werden soll, der zweite bestimmt das Originalbild, die beiden nächsten parameter bestimmen die Startkoordinaten im Zielbild, die darauffolgenden beiden die Koordinaten im Originalbild. Darauf folgen noch jeweils Höhe und Breite von Original und Zielbild.</p>
<p>Hier ist zu beachten das die Startkoordinaten im Zielbild jeweils 1 sind, würde bei 0 angefangen werden zu zeichnen würde der Rahmen wieder &#8220;übermalt&#8221; werden. Im Originalbild wird natürlich alles von 0|0 bis $breite|$hoehe erfasst. Bei der Breite/Höhe des Vorschaubilds müssen 2 Pixel wegen dem Rahmen abgezogen werden (jeweils 1 Pixel oben/unten, und einer links/rechts).</p>
<p>Wenn beim verkleinern ein Fehler auftritt gibt die Funktion FALSE zurück.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">imagecopyresampled</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #000088;">$originalbild</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #000088;">$breite</span><span style="color: #339933;">,</span> <span style="color: #000088;">$hoehe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<div id="attachment_13" class="wp-caption alignleft" style="width: 130px"><a href="http://antusblog.de/wp-content/uploads/2008/10/resampled.png"><img class="size-medium wp-image-13" title="imagecopyresampled" src="http://antusblog.de/wp-content/uploads/2008/10/resampled.png" alt="Bild das mit imagecopyresampled verkleinert wurde" width="120" height="79" /></a><p class="wp-caption-text">Bild das mit imagecopyresampled verkleinert wurde</p></div>
<div id="attachment_14" class="wp-caption alignright" style="width: 130px"><a href="http://antusblog.de/wp-content/uploads/2008/10/resized.png"><img class="size-full wp-image-14" title="imagecopyresized" src="http://antusblog.de/wp-content/uploads/2008/10/resized.png" alt="Bild das mit imagecopyresized verkleinert wurde" width="120" height="79" /></a><p class="wp-caption-text">Bild das mit imagecopyresized verkleinert wurde</p></div>
<p>Die Funktion imagecopyresized arbeitet zwar schneller (ungefähr 400%) als imagecopyresampled, die Ergebnisse sehen aber auch bei weitem nicht so gut aus.</p>
<h2>Vorschaubild abspeichern</h2>
<p>Nun muss das Vorschaubild noch auf dem Server abgespeichert werden, denn bis jetzt befindet es sich ja nur im Speicher. Dafür können die Funktionen <a href="http://de2.php.net/manual/en/function.imagepng.php" target="_blank">imagepng</a>, <a href="http://de2.php.net/manual/en/function.imagegif.php" target="_blank">imagegif</a> oder <a href="http://de2.php.net/manual/en/function.imagejpeg.php" target="_blank">imagejpeg</a> verwendet werden. Es gibt natürlich auch noch andere Funktionen für andere Bildformate, die hier aufgezählten sind aber die gängigsten. Der erste Parameter der Funktion gibt immer das Bild an, das gespeichert werden soll, der zweite den Dateinamen/Pfad unter dem es gespeichert werden soll. Den Funktionen zum Abspeichern von JPEGs und PNGs kann man zusätzlich noch sagen welche Qualität das Zielbild haben soll, bzw. wie stark es komprimiert werden soll.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">imagepng</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;vorschaubild.png&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h2>Optional: Kleiner Balken mit Informationen</h2>
<p>Das Vorschaubild ist jetzt fertig, aber wäre es nicht praktisch wenn im Vorschaubild angezeigt werden würde welche Dateigröße und welche Auflösung das Originalbild hat?</p>
<p>Zuerst muss die Dateigröße des Originalbildes  ermittelt werden, die Funktion <a href="http://de2.php.net/manual/en/function.filesize.php" target="_blank">filesize(string $filename)</a> macht das. Die zurückgegebene Dateigröße muss nun nur noch von Bytes in Kibibytes bzw. Mebibytes umgerechnet werden. Dazu teilen man die Dateigröße durch 1024. Wenn ein Bild aber größer als 1024 KiB ist, sollte man es in MiB umrechnen, im Vorschaubild ist ja nicht viel Platz zur Anzeige von Informationen. Also fragt man ab ob das Bild größer oder gleich 1 MiB ist, und wenn das der Fall ist, wird die Dateigröße nochmal durch 1024 geteilt.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$bildgroesse</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$original_dateiname</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$bildgroesse</span> <span style="color: #339933;">/=</span> <span style="color: #cc66cc;">1024</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$bildgroesse</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">1024</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$bildgroesse</span> <span style="color: #339933;">/=</span> <span style="color: #cc66cc;">1024</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$bildgroesse_text</span> <span style="color: #339933;">=</span> <span style="color: #990000;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bildgroesse</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; MiB&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #000088;">$bildgroesse_text</span> <span style="color: #339933;">=</span> <span style="color: #990000;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bildgroesse</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; KiB&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Die Auflösung des Originalbildes wurde ja schon am Anfang mittels getimagesize() ermittelt und in $hoehe und $breite abgespeichert.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">{$breite}</span>x<span style="color: #006699; font-weight: bold;">{$hoehe}</span> <span style="color: #006699; font-weight: bold;">$bildgroesse_text</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>So lassen sich die Informationen recht kompakt darstellen.</p>
<p>Da die Informationen aber in den meisten Fällen immer noch zu lang für das Vorschaubild sind, muss die Größe des Vorschaubildes etwas angehoben werden, anstatt 100&#215;100 also besser 120&#215;120.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">120</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">120</span><span style="color: #339933;">;</span></pre></div></div>

<p>Da die Informationen das Bild ja nicht überdecken sollen muss das Vorschaubild etwas vergrößert werden:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$vorschaubild</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatetruecolor</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschau_breite</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Um die Informationen mittig anzuzeigen muss erstmal die Länge des Textes berechnet werden, indem man die Anzahl der Buchstaben (+ Leerzeichen) mal die Anzahl vertikaler Pixel pro Buchstabe rechnet. Dann zieht man das Ergebnis von der Breite des Vorschaubildes ab und teilt das ganze durch 2.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$startposition</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">7</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span></pre></div></div>

<p>Der Text braucht natürlich auch wieder eine Farbe, Rot/Grün/Blau auf 255 ergibt die Farbe Weiß:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$text_farbe</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecolorallocate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">255</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">255</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">255</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Nun muss ein kleiner Balken unterhalb des Vorschaubildes gezeichnet werden, dazu wird die Funktion <a href="http://de2.php.net/manual/en/function.imagefilledrectangle.php" target="_blank">imagefilledrectangle</a> verwendet. Diese funktioniert wie imagerectangle, nur das diese Funktion das Rechteck auch ausmalt. Als Farbe wird die selbe Farbe wie für den Rahmen verwendet.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">imagefilledrectangle</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_hoehe</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$rahmenfarbe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Jetzt können die Informationen endlich in den eben gezeichneten Balken geschrieben werden. Um Text in Bilder zu schreiben gibt es in PHP die Funktionen <a href="http://de2.php.net/manual/en/function.imagestring.php" target="_blank">imagestring</a> und <a href="http://de2.php.net/manual/en/function.imagettftext.php" target="_blank">imagettftext</a>, erstere kann zwar nur Bitmap-Schriftarten darstellen (imagettftext kann auch TrueType-Schriftarten verwenden), das reicht aber für diese Anleitung vollkommen aus. Der erste Parameter bestimmt wieder das Bild in das geschrieben werden soll, der zweite die Schriftart, wenn hier Zahlen zwischen 1 und 5 angegeben werden, wird eine Standardschriftart verwendet. Parameter 3 und 4 geben an an welcher Stelle begonnen werden soll zu schreiben, die anderen Beiden bestimmen den Text und die Schriftfarbe.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">imagestring</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #000088;">$startposition</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$text</span><span style="color: #339933;">,</span> <span style="color: #000088;">$text_farbe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Fertig! <img src='http://www.antusblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>&#8220;{$breite}x{$hoehe}&#8221; Warum die geschweiften Klammern?</strong><br />
Ohne die geschleiften Klammern würde PHP denken es sind die Variablen $breite[b]x[/b] und $höhe gemeint, durch die geschweiften Klammern weiß PHP das die Variable nur $breite heißt. So lassen sich übrigens auch Arrays direkt in Strings einbinden: &#8220;{$array['index']}&#8221;</p>
<h2>Abschließendes</h2>
<p>Das wars? Ja, natürlich lässt sich das ganze noch verbessern und erweitern, z.B. kann man das ganze in eine Klasse packen, den Balken mit den Informationen transparent über das Bild legen und vieles mehr. Man kann noch Überprüfungen einbauen, z.B. kann man noch abfragen ob das Originalbild bereits kleiner ist als das Vorschaubild, in dem Fall macht es natürlich wenig Sinn es zu verkleinern. Aber das überlasse ich euch, lasst eurer Fantasie freien Lauf. <img src='http://www.antusblog.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Hier noch einmal der gesamte Quelltext:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$original_dateiname</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;original.png&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Aufloesung und Bildformat bestimmen */</span>
<span style="color: #000088;">$informationen</span> <span style="color: #339933;">=</span> <span style="color: #990000;">getimagesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$original_dateiname</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Wenn das fehlschlägt -&gt; Fehler */</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$informationen</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">FALSE</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$informationen</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$informationen</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Fehler beim Ermitteln der Bildauflösung!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$breite</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$informationen</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$hoehe</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$informationen</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$format</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$informationen</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'mime'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Originalbild oeffnen */</span>
<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$format</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">&quot;image/gif&quot;</span><span style="color: #339933;">:</span> <span style="color: #000088;">$originalbild</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatefromgif</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$original_dateiname</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">&quot;image/jpeg&quot;</span><span style="color: #339933;">:</span> <span style="color: #000088;">$originalbild</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatefromjpeg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$original_dateiname</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">&quot;image/png&quot;</span><span style="color: #339933;">:</span> <span style="color: #000088;">$originalbild</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatefrompng</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$original_dateiname</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span> <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Bildformat nicht unterstützt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Breite/Hoehe Verhältnis berechnen und Groesse des Vorschaubildes entsprechend anpassen */</span>
<span style="color: #000088;">$breite_verhaeltnis</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$breite</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$hoehe</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$hoehe_verhaeltnis</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$hoehe</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$breite</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$breite_verhaeltnis</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$hoehe_verhaeltnis</span><span style="color: #009900;">&#41;</span>
<span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">=</span> <span style="color: #990000;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$breite_verhaeltnis</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #000088;">$vorschau_breite</span>  <span style="color: #339933;">=</span> <span style="color: #990000;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$hoehe_verhaeltnis</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Vorschaubild erstellen */</span>
<span style="color: #000088;">$vorschaubild</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatetruecolor</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschau_breite</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_hoehe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$vorschaubild</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Fehler beim Erstellen des Vorschaubilds!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Rahmen zeichnen */</span>
<span style="color: #000088;">$rahmenfarbe</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecolorallocate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">imagerectangle</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$rahmenfarbe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Originalbild verkleinern und in das Vorschaubild einfuegen */</span>
<span style="color: #990000;">imagecopyresampled</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #000088;">$originalbild</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_breite</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vorschau_hoehe</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #000088;">$breite</span><span style="color: #339933;">,</span> <span style="color: #000088;">$hoehe</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Vorschaubild abspeichern */</span>
<span style="color: #990000;">imagepng</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$vorschaubild</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;vorschaubild.png&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2008/10/13/php-vorschaubilder-erstellen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

