<?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>xscDevBlog - LastSharp &#38; Co. &#187; php</title>
	<atom:link href="http://dev.xscheme.de/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.xscheme.de</link>
	<description>Der xscheme-DevelopmentBlog</description>
	<lastBuildDate>Sun, 23 May 2010 11:40:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>(Quadratische) Thumbnails erstellen (PHP)</title>
		<link>http://dev.xscheme.de/2008/09/quadratische-thumbnails-erstellen-php/</link>
		<comments>http://dev.xscheme.de/2008/09/quadratische-thumbnails-erstellen-php/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 12:04:29 +0000</pubDate>
		<dc:creator>xsc</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[bilder]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpthumb()]]></category>
		<category><![CDATA[thumbnails]]></category>

		<guid isPermaLink="false">http://dev.xscheme.de/?p=305</guid>
		<description><![CDATA[Wenn man im heutigen Web 2.0 einmal die Runde macht, findet man sie überall &#8211; manchmal einzeln und verloren als Avatar, manchmal in kleinen Grüppchen (z.B. in Website-Verzeichnissen) oder in riesigen Ansammlungen wie auf Flickr oder der Google-Bildersuche. Die Rede ist &#8211; und der gewiefte Leser wird das schon nach der Überschrift gewusst haben &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man im heutigen Web 2.0 einmal die Runde macht, findet man sie überall &#8211; manchmal einzeln und verloren als Avatar, manchmal in kleinen Grüppchen (z.B. in Website-Verzeichnissen) oder in riesigen Ansammlungen wie auf <a href="http://www.flickr.com">Flickr</a> oder der Google-Bildersuche. Die Rede ist &#8211; und der gewiefte Leser wird das schon nach der Überschrift gewusst haben &#8211; von <strong>Thumbnails</strong>.</p>
<p><span id="more-305"></span></p>
<p>Thumbnails (engl. für &#8220;Daumennagel&#8221;, auf die Größe anspielend) sind kleine Vorschaubildchen und heutzutage einfach nicht mehr wegzudenken: das schlanke, schlichte <em>Web-2.0-Design</em> (whatever that means) kommt nicht ohne sie aus, denn niemand gibt sich mehr damit zufrieden, Textlinks auf Bilder zu setzen oder &#8211; noch schlimmer &#8211; das 1600&#215;1280-Bild mithilfe der hauseigenen HTML-Attribute zu verkleinern und dem User damit großzügig noch einmal Zeit zu geben, zum Colaautomaten im Erdgeschoss zu gehen und sich was zu trinken zu holen&#8230; Das ging früher vielleicht noch, aber heute haben wir mit so altmodischem Zeug nichts mehr am Hut &#8211; außer es ist Retro und Absicht, dann isses cool;) &#8211; und deswegen will ich hier kurz zeigen, wie man auch auf der eigenen Seite mit kleinen Vorschaubildchen angibt.</p>
<p>Die Lösung heißt <strong><a href="http://phpthumb.sourceforge.net/">phpThumb()</a></strong>. phpThumb() ist ein PHP-Script, das mithilfe der Open-Source-<a href="http://de.wikipedia.org/wiki/GD_Library">GD-Library</a> aus Bilddateien, die auf dem eigenen oder einem anderen Server liegen oder aus einer Datenbank ausgelesen werden, verkleinerte Vorschaubildchen erstellen kann. Es unterstützt die Formate JPEG, PNG, GIF, BMP und ICO und kommt mit einer Reihe an Konfigurationsmöglichkeiten wie Rotation, Cropping, Anti-Aliasing, verschiedene Qualitätsstufen, dem Einfügen eines Wasserzeichens, etc&#8230;</p>
<p>Das Script bietet zwei verschiedene Modi zur Erstellung der Thumbnails an: einmal über die Verwendung der Datei &#8220;phpThumb.php&#8221; als src-Attribut eines img-Tags; oder eben über die Verwendung der phpThumb-Klasse in der eigenen Website.</p>
<p><strong>Aufruf von phpThumb.php</strong></p>
<p>Angenommen wir wollen einen Thumbnail der Datei &#8220;gross.jpg&#8221; erstellen. Das Ergebnis soll 100&#215;100px groß sein, nur noch in Graustufen daherkommen und zwecks Dateigröße auf eine Qualität von 60% reduziert werden. Das einzige was wir tun müssen, ist es, einen img-Tag in unserem HTML-Dokument zu erstellen, und die Datei &#8220;phpThumb.php&#8221; (mit allen Optionen) als src-Attribut zu spezifizieren. In unserem Fall:</p>
<pre>&lt;img src="[Pfad]/phpThumb.php?<strong>src=[Pfad]/gross.jpg&amp;w=100&amp;h=100&amp;q=60&amp;fltr[]=gray</strong>" /&gt;</pre>
<p>Hinter dem &#8220;?&#8221; stehen die einzelnen Optionen. Eine genaue Auflistung gibt es weiter unten.</p>
<p><strong>Verwendung de phpThumb-Klasse</strong></p>
<p>Hat man die phpThumb-Dateien heruntergeladen, muss man zuallererst die Datei &#8220;phpthumb.class.php&#8221; einbinden und ein phpThumb-Objekt erstellen:</p>
<pre>require_once(dirname(__FILE__)."[Pfad]/phpthumb.class.php");
$pt = new phpThumb();</pre>
<p>Anschließend geht es an die Konfiguration: mithilfe von setSourceFilename() geben wir an, woher die Daten genommen werden sollen und mithilfe der setParameter()-Methode legen wir die Einstellungen fest. Für unser &#8220;gross.jpg&#8221; von oben:</p>
<pre>$pt-&gt;setSourceFilename("[Pfad]/gross.jpg");
$pt-&gt;setParameter("w", 100);
$pt-&gt;setParameter("h", 100);
$pt-&gt;setParameter("q", 60);
$pt-&gt;setParameter("fltr", array("gray"));
$pt-&gt;setParameter("config_output_format", "jpg");
$pt-&gt;setParameter("config_allow_src_above_docroot", true);</pre>
<p>(Die letzte Zeile ist nur notwendig, wenn man nicht im DOCUMENT_ROOT-Verzeichnis arbeitet.)<br />
Nun muss der Thumbnail nur noch erstellt und ausgegeben werden:</p>
<pre>if ($pt-&gt;GenerateThumbnail()) {
    if (!$pt-&gt;RenderToFile("[Ausgabedatei]")) {
        // Mach etwas mit dem Fehler
        echo "&lt;b&gt;".$pt-&gt;fatalerror."&lt;/b&gt;";
    }
}</pre>
<p>Mit diesem Wissen lässt sich sehr leicht eine Funktion schreiben, die das Erstellen eines (einfachen) Thumbnails erledigt:</p>
<pre class="php" name="code">require_once(dirname(__FILE__)."[Pfad]/phpthumb.class.php");
function ErstelleThumbnail($quelldatei, $ausgabedatei, $breite, $hoehe, $graustufen=false, $format="jpg")
{
    $pt = new phpThumb();
    $pt-&gt;setSourceFilename($quelldatei);
    $pt-&gt;setParameter("w", $breite);
    $pt-&gt;setParameter("h", $hoehe);
    $pt-&gt;setParameter("q", 80); // je nachdem
    if ($graustufen) $pt-&gt;setParameter("fltr", array("gray"));
    $pt-&gt;setParameter("config_output_format", $format);
    $pt-&gt;setParameter("config_allow_src_above_docroot", true);
    if ($pt-&gt;GenerateThumbnail()) {
        if (!$pt-&gt;RenderToFile($ausgabedatei)) {
            // Mach etwas mit dem Fehler
            echo "&lt;b&gt;".$pt-&gt;fatalerror."&lt;/b&gt;";
        }
    }
}</pre>
<p><strong>Quadratische Thumbnails</strong></p>
<p>phpThumb() besitzt eine Einstellungsmöglichkeit namens <em>ZoomCrop</em>, die beim Erstellen des Thumbnails bewirkt, dass das Bild nicht verzerrt wird, wenn die Angaben für Breite und Höhe nicht seinen Proportionen entsprechen. Stattdessen wird einfach ein Ausschnitt aus dem verkleinerten Bild herausgeschnitten (von der Mitte ausgehend), der die entsprechenden Maße hat.</p>
<p>An einem Beispiel will ich das verdeutlichen: Angenommen wir haben ein Bild der Größe 200&#215;400 und wollen einen 100&#215;100-Thumbnail. Das geht nun folgendermaßen vonstatten: Das Bild wird so verkleinert, dass die kleinere der Seiten das gewünschte Maß erhält, d.h.: aus 200&#215;400 wird 100&#215;200. Nun wird aus dem neu entstandenen Bild (vom Zentrum ausgehend) ein Stück herausgeschnitten, sodass auch die zweite Seite das gewünschte Maß erreicht. Dies entspräche in unserem Beispiel einem Rechteck mit den zwei gegenüberliegenden Ecken (0;50) und (100;150). Voilà, fertig ist der Daumennagel!</p>
<p>Die Funktion ZoomCrop wird mithilfe des Parameters &#8220;zc&#8221; aktiviert, der hierfür den Wert &#8220;C&#8221; erhält.</p>
<p>Eine Funktion zum Erstellen quadratischer Thumbnails könnte so aussehen:</p>
<pre class="php" name="code">require_once(dirname(__FILE__)."[Pfad]/phpthumb.class.php");
function ErstelleQuadratischenThumbnail($quelldatei, $ausgabedatei, $seitenlaenge, $format="jpg")
{
    $pt = new phpThumb();
    $pt-&gt;setSourceFilename($quelldatei);
    $pt-&gt;setParameter("w", $seitenlaenge);
    $pt-&gt;setParameter("h", $seitenlaenge);
    $pt-&gt;setParameter("q", 80); // je nachdem
    $pt-&gt;setParameter("zc", "C");
    $pt-&gt;setParameter("config_output_format", $format);
    $pt-&gt;setParameter("config_allow_src_above_docroot", true);
    if ($pt-&gt;GenerateThumbnail()) {
        if (!$pt-&gt;RenderToFile($ausgabedatei)) {
            // Mach etwas mit dem Fehler
            echo "&lt;b&gt;".$pt-&gt;fatalerror."&lt;/b&gt;";
        }
    }
}</pre>
<p><strong>Liste der wichtigsten phpThumb()-Parameter</strong></p>
<table style="width: 100%; text-align: center;">
<tr>
<th style='width: 30%;'>Parameter</th>
<th>Erklärung</th>
</tr>
<tr>
<td>src</td>
<td>Pfad zur Quelldatei</td>
</tr>
<tr>
<td>w</td>
<td>Die Breite des Thumbnails</td>
</tr>
<tr>
<td>h</td>
<td>Die Höhe des Thumbnails</td>
</tr>
<tr>
<td>q</td>
<td>Die Qualität bei JPEG-Ausgabe (im Bereich 1-100; 75 ist Standard)</td>
</tr>
<tr>
<td>f</td>
<td>Ausgabeformat: &#8220;jpg&#8221;, &#8220;png&#8221;, &#8220;gif&#8221;</td>
</tr>
<tr>
<td>zc</td>
<td>ZoomCrop aktivieren; Wert: &#8220;C&#8221;</td>
</tr>
<tr>
<td>bc</td>
<td>Farbe des Thumbnail-Rahmens als Hex-Color (z.b. 000000 für Schwarz)</td>
</tr>
<tr>
<td>ra</td>
<td>Rotationsangabe in Grad</td>
</tr>
</table>
<p>-<br />
Alle Optionen, z.B. die Filter-Einstellungen finden sich in der <a href="http://phpthumb.sourceforge.net/demo/docs/phpthumb.readme.txt">phpThumb()-Readme</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.xscheme.de/2008/09/quadratische-thumbnails-erstellen-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
