<?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>ROAE-Blog &#187; Thumbnails generieren</title>
	<atom:link href="http://blog.root-of-all-evil.com/tag/thumbnails-generieren/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.root-of-all-evil.com</link>
	<description>Studium, Codeing und Gedachtes</description>
	<lastBuildDate>Mon, 30 Jan 2012 22:58:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Automatisieren: Stapelverarbeitung mit Adobe Photoshop</title>
		<link>http://blog.root-of-all-evil.com/2010/04/automatisieren-stapelverarbeitung-mit-adobe-photoshop/</link>
		<comments>http://blog.root-of-all-evil.com/2010/04/automatisieren-stapelverarbeitung-mit-adobe-photoshop/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 10:00:52 +0000</pubDate>
		<dc:creator>Felix</dc:creator>
				<category><![CDATA[Erklärungen]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Adobe Photoshop]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Stapelverarbeitung]]></category>
		<category><![CDATA[Thumbnails generieren]]></category>
		<category><![CDATA[Wasserzeichen]]></category>

		<guid isPermaLink="false">http://blog.root-of-all-evil.com/?p=562</guid>
		<description><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/04/automatisieren-stapelverarbeitung-mit-adobe-photoshop/" title="Automatisieren: Stapelverarbeitung mit Adobe Photoshop"></a>Oft fallen im Bereich der Bildbearbeitung Aufgaben an, die für eine Fülle von Bildern wiederholt werden muss. Hierfür bietet Adobe Photoshop die Stapelverarbeitung welche beliebige Schritte, z.B. für einen Ordner mit Bildern, wiederholt. Hier sollen die notwendigen Schritte aufgezeigt werden, &#8230;<p class="read-more"><a href="http://blog.root-of-all-evil.com/2010/04/automatisieren-stapelverarbeitung-mit-adobe-photoshop/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/04/automatisieren-stapelverarbeitung-mit-adobe-photoshop/" title="Automatisieren: Stapelverarbeitung mit Adobe Photoshop"></a><p>Oft fallen im Bereich der Bildbearbeitung Aufgaben an, die für eine Fülle von Bildern wiederholt werden muss. Hierfür bietet Adobe Photoshop die Stapelverarbeitung welche beliebige Schritte, z.B. für einen Ordner mit Bildern, wiederholt.</p>
<p>Hier sollen die notwendigen Schritte aufgezeigt werden, welche es benötigt, <strong>von Bildern automatisiert Thumbnails zu generieren. Das Orginal-Bild und das Thumbnail (Vorschaubild) sollen beide über ein Wasserzeichen geschützt sein.</strong></p>
<p><strong>Sämtliche <a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/ROAE-Tutorial-Stapelverarbeitung-mit-Photoshop.zip">benötigten Dateien</a> werden zur Verfügung gestellt</strong>, sodass die notwendigen Schritte gut nachvollzogen werden können.</p>
<p><span id="more-562"></span></p>
<h3>Das Ziel</h3>
<p>Das Video zeigt auf, wie Sie die Aktion, welche wir erstellen, anwenden. Natürlich könne Sie jedes beliebige Wasserzeichen verwenden.</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/l4W2zlZZvUo&amp;hl=de_DE&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="640" height="385" src="http://www.youtube.com/v/l4W2zlZZvUo&amp;hl=de_DE&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p style="text-align: center;">
<h3>Vorbereitung</h3>
<p>Die <a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/ROAE-Tutorial-Stapelverarbeitung-mit-Photoshop.zip">benötigten Dateien laden Sie bitte hier herunter. </a>Nachdem Sie diese auf dem Desktop entpackt haben, starten Sie bitte <em>Adobe Photoshop.</em></p>
<p>Zu Beginn starten wie Adobe Photoshop und  blenden die <strong>Aktionen-Palette</strong> über <em>Fenster -&gt; Aktionen</em> oder die Funktionstaste <em>F9 </em>ein.</p>
<div id="attachment_574" class="wp-caption aligncenter" style="width: 360px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/Photoshop-Aktionen1.png" rel="lightbox[562]"><img class="size-full wp-image-574" title="Photoshop Aktionen" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/Photoshop-Aktionen1.png" alt="" width="350" height="216" /></a><p class="wp-caption-text">Aufrufen der Aktionen-Palette</p></div>
<p>Im rechten Teil verfügen wir nun über die Aktionen-Palette.</p>
<div id="attachment_576" class="wp-caption aligncenter" style="width: 304px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/ps_aktionen.png" rel="lightbox[562]"><img class="size-full wp-image-576" title="ps_aktionen" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/ps_aktionen.png" alt="" width="294" height="298" /></a><p class="wp-caption-text">Aktionen-Palette</p></div>
<p>Mit Hilfe dieser Palette können wir (fast) alles was wir in Photoshop ausführen aufzeichen lassen und dann später durch einen Knopfdruck abspielen.</p>
<p>Darüber hinaus <strong>öffnen Sie bitte die Datei ROAE-Tutorial/logo.gif </strong>(Sie können später die Datei durch Ihr eigenes Logo ersetzen).<strong><br />
</strong></p>
<h3>Aktion erstellen und aufzeichen</h3>
<p><span style="color: #ff0000;">Hinweis:</span> In den  Dateien ist bereits die fertige Aktion enthalten (Datei <em>Wasserzeichen_und_Thumbnaill-Photoshop_Aktion</em>), welche Sie durch einen  Doppelklick in Photoshop importieren können. Sie müssen also nicht die  folgenden Schritte nicht durchführen.<em><br />
</em></p>
<p>Aus je einem Orginal-Bild sollen zwei Bilder erstellt werden. Einmal das Bild mit einem Wasserzeichen versehen, zum zweiten ein Thumbnail (Vorschaubild), mit einer Breite von 400 Pixeln und ebenfalls einem Wasserzeichen.</p>
<p><strong>Schritt 01: Aktion erstellen</strong></p>
<p>Um die notwendigen Schritte aufzeichnen zu lassen, klicken wir in der Aktionen-Palette auf <em>Neue Aktion erstellen</em></p>
<div id="attachment_577" class="wp-caption aligncenter" style="width: 229px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/neue_aktion_erstellen.png" rel="lightbox[562]"><img class="size-full wp-image-577" title="neue_aktion_erstellen" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/neue_aktion_erstellen.png" alt="" width="219" height="58" /></a><p class="wp-caption-text">Erstellen einer neuen Aktion</p></div>
<p>und tragen in dem neuen Fenster als Aktionsname <em>Wasserzeichen und Thumbnail</em> ein.</p>
<div id="attachment_623" class="wp-caption aligncenter" style="width: 469px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/aktion_aufzeichnen.jpg" rel="lightbox[562]"><img class="size-full wp-image-623" title="aktion_aufzeichnen" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/aktion_aufzeichnen.jpg" alt="" width="459" height="164" /></a><p class="wp-caption-text">Neue Aktion erstellen &amp; aufzeichnen beginnen</p></div>
<p>Rechts in der Aktionenpalette ist nun der Eintrag <em>Wasserzeichen und Thumbnail</em> markiert. Des weiteren ist der Aufnahme-Knopf aktiviert:</p>
<div id="attachment_580" class="wp-caption aligncenter" style="width: 300px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/aktion-läuft.png" rel="lightbox[562]"><img class="size-full wp-image-580" title="aktion läuft" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/aktion-läuft.png" alt="" width="290" height="135" /></a><p class="wp-caption-text">Aktionen werden aufgezeichnet</p></div>
<p><strong>Bitte achten Sie darauf folgende Schritte genau wie beschrieben auszuführen</strong>. Kleine Abweichungen (z.B. wechseln zwischen den geöffneten Dateien) können später zu einem Fehler führen.</p>
<p><strong>Schritt 02: Orginal-Bild öffnen</strong></p>
<p>Über <em>Datei -&gt; Öffnen</em> laden wir zuerst eines unser Original-Bilder in Photoshop. Wählen Sie die Datei <em>ROAE-Tutorial/original_bilder/auto.jpg</em> aus dem entpackten ZIP-Archiv (hier können Sie die Bilder nochmal herunterladen &#8211; falls Sie dass noch nicht gemacht haben sollten).</p>
<p><strong>Schritt 03: Hintergrund in Ebene wandeln</strong></p>
<p>Betrachten Sie nun die Ebenenpalette rechts unten (sollte diese nicht sichtbar sein, so blenden Sie diese bitte über<em> Fenster -&gt; Ebenen</em> bzw. die Funktionstaste <em>F7 </em>ein). Klicken Sie mit der rechten Maustaste in der Ebenpalette auf die Ebene <em>Hintergrund </em>und wählen Sie im Kontexmenü <em>Ebene aus Hintergrund</em>. Durch diese Aktion wird die Ebene zu einer &#8220;gewöhnlichen&#8221; Ebene, was mehr Operationen gestartet.<br />
Den Dialog  welcher Name, Farbe und ähnliches abfragt, bestätigen Sie mit <em>ENTER</em>, d.h. die Standardeinstellungen werden übernommen.</p>
<div id="attachment_581" class="wp-caption aligncenter" style="width: 313px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/ebene_aus_hintergrund.jpg" rel="lightbox[562]"><img class="size-full wp-image-581" title="ebene_aus_hintergrund" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/ebene_aus_hintergrund.jpg" alt="" width="303" height="192" /></a><p class="wp-caption-text">In Ebene wandeln</p></div>
<p>Die Ebene heißt danach nicht mehr <em>Hintergrund</em>, sondern <em>Ebene 0</em> oder ähnlich.</p>
<p><strong>Schritt 04: Wasserzeichen kopieren</strong></p>
<p>Wechseln Sie nun auf das zuvor bereits geöffnete Datei <em>logo.gif</em>.</p>
<p>Wählen Sie nun das komplette Bild aus, in dem Sie über das Menü <em>Auswahl -&gt; Alles auswählen</em> oder die Tastenkombination <em>STRG + A</em> verwenden. Kopieren Sie das Wasserzeichen in die Zwischenablage über das Menü <em>Bearbeiten -&gt; Kopieren</em> (alternativ <em>STRG + C</em>).</p>
<p><strong>Schritt 05: Wasserzeichen in Orginal-Bild einfügen</strong></p>
<p>Wechseln Sie nun zurück auf das Original-Bild mit dem Auto und fügen dort das Wasserzeichen über <em>Bearbeiten -&gt; Einfügen</em> (alternativ <em>STRG + V</em>) ein. Das Wasserzeichen wurde nun zentriert eingefügt und in der Ebenen-Palette eine neue Ebene erstellt:</p>
<div id="attachment_582" class="wp-caption aligncenter" style="width: 620px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/ebeneundbild.jpg" rel="lightbox[562]"><img class="size-full wp-image-582" title="ebeneundbild" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/ebeneundbild.jpg" alt="" width="610" height="323" /></a><p class="wp-caption-text">Zentriertes Logo und neue Ebene</p></div>
<p><strong>Schritt 06: Wasserzeichen ausrichten</strong></p>
<p>Kontrollieren Sie dass in der Ebenen-Palette die Ebene, mit dem Wasserzeichen markiert ist (Ebene 1). Markieren Sie nun wieder alles über <em>Auswahl -&gt; Alles auswählen</em> bzw. <em>STRG + A</em>. Richten Sie nun das Logo aus in dem Sie im Menü <em>Ebene -&gt; Ebenen an Auswahl ausrichten -&gt; Untere Kanten</em> und <em>Ebene -&gt; Ebenen an Auswahl ausrichten -&gt; Rechte Kanten</em> wählen. Das Wasserzeichen befindet sich nun bündig unten rechts.</p>
<div id="attachment_584" class="wp-caption aligncenter" style="width: 439px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/logo-ausgerichtet.jpg" rel="lightbox[562]"><img class="size-full wp-image-584" title="logo ausgerichtet" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/logo-ausgerichtet.jpg" alt="" width="429" height="323" /></a><p class="wp-caption-text">Wasserzeichen ausgerichtet</p></div>
<p><strong>Schritt 07: Bild mit Wasserzeichen speichern</strong></p>
<p>Über Datei -&gt; Speichern unter speichern wir das Bild  in dem Ordner <em>roae_tutorial/fertige_bilder/orginal_Bild.jpg.</em> Wählen Sie hierzu bei <strong>Format <em>JPEG</em><em> (*.JPEG, *.JPG, *.JPE)</em></strong>.</p>
<p><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/als_jpg_speichern.jpg" rel="lightbox[562]"><img class="aligncenter size-medium wp-image-673" title="Datei als JPG speichern" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/als_jpg_speichern-300x260.jpg" alt="" width="300" height="260" /></a></p>
<p>Bei den Speicheroptionen setzten Sie bitte die <em>Qualität </em>(<span style="color: #ff0000;">1</span>) auf <em>Hoch </em>und klicken anschließend auf <em>Speichern </em>.</p>
<div id="attachment_669" class="wp-caption aligncenter" style="width: 383px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/jpeg_options.jpg" rel="lightbox[562]"><img class="size-full wp-image-669" title="jpeg_options" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/jpeg_options.jpg" alt="" width="373" height="300" /></a><p class="wp-caption-text">Qualtität für Bild festlegen</p></div>
<p><strong>Schritt 08: Thumbnail erstellen</strong></p>
<p>Wählen Sie im Menü <em>Bild -&gt; Bildgröße</em>. Für die Breite tragen Sie <em>400</em> unter <em>Pixel </em>ein und klicken anschließend auf <em>OK</em>.</p>
<div id="attachment_587" class="wp-caption aligncenter" style="width: 451px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/bildgroesse-aendern.jpg" rel="lightbox[562]"><img class="size-full wp-image-587" title="bildgroesse aendern" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/bildgroesse-aendern.jpg" alt="" width="441" height="364" /></a><p class="wp-caption-text">Bildgröße ändern</p></div>
<p><strong>Schritt 09: Thumbnail speichern</strong></p>
<p>Speichern Sie das verkleinerte Bild nun über Datei -&gt; Speichern unter  in dem  Ordner<em> roae_tutorial/fertige_bilder/thumbnail.jpg</em>. Wählen Sie als <strong>Dateityp auch hier wieder JPG</strong>. Als Qualitätsstufe dürfte hier Mittel in vielen Fällen ausreichend sein.</p>
<p><strong>Schritt 10: Fenster schließen</strong></p>
<p>Schließen Sie nun das Fenster mit dem Orignal-Bild. Eine Nachfrage ob Sie die Änderung speichern wollen verneinen Sie. Die Datei mit dem Wasserzeichen / Logo lassen Sie geöffnet.</p>
<p><strong>Schritt 11: Aufnahme beenden</strong></p>
<p>Beenden Sie nun die Aufnahme über den Button <em>Aufnahme beenden.</em></p>
<div id="attachment_589" class="wp-caption aligncenter" style="width: 287px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/aufnamhe-beenden.jpg" rel="lightbox[562]"><img class="size-full wp-image-589" title="aufnahme beenden" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/aufnamhe-beenden.jpg" alt="" width="277" height="41" /></a><p class="wp-caption-text">Beenden der Aufnahme</p></div>
<h3>Aktion auf alle Bilder in einem Ordner anwenden / Stapelverarbeitung</h3>
<p>Damit die Aktion erfolgreich ausgeführt werden kann,<strong> schließen Sie alle Dateien in Photoshop</strong>. Anschließend öffnen Sie das Wasserzeichen (ROAE-Tutorial/logo.gif).</p>
<p><strong>Einstellungen</strong></p>
<p>Wählen Sie <em>Datei -&gt; Automatisieren -&gt; Stapelverarbeitung</em>. Es öffnet sich ein großer Dialog der sich in die Bestandteile Abspielen, Quelle, Ziel und Fehler unterteilt. Übernehmen Sie nun die Einstellungen wie im Screenshot gezeigt. Die einzelnen Werte sind gefolgt nochmal schriftlich erläutert:</p>
<div id="attachment_674" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/stapelverarbeitung_optionen.jpg" rel="lightbox[562]"><img class="size-medium wp-image-674" title="stapelverarbeitung_optionen" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/stapelverarbeitung_optionen-300x210.jpg" alt="" width="300" height="210" /></a><p class="wp-caption-text">Einstellungen für die Stapelverarbeitung</p></div>
<p><span style="text-decoration: underline;">Abspielen</span></p>
<p>Wählen Sie bei Satz <em>Standardaktion </em>(<span style="color: #ff0000;">1</span>), bei Aktion <em>Wasserzeichen und Thumbnails</em> (<span style="color: #ff0000;">2</span>).</p>
<p><span style="text-decoration: underline;">Quelle</span></p>
<p>Bei der Art der Qelle wählen Sie <em>Ordner </em>(<span style="color: #ff0000;">3</span>) damit Sie im Dialog den Pfad zu den Orginal-Bildern (ROAE-Tutorial/original-Bilder) angegeben können (<span style="color: #ff0000;">4</span>). <em>Öffnen in Aktionen überschreiben</em> (<span style="color: #ff0000;">5</span>) muss darüber hinaus aktiviert werden.</p>
<p><span style="text-decoration: underline;">Ziel</span></p>
<p>Bei Ziel wählen Sie wie bei<em> </em>Quelle  <em>Ordner </em>(<span style="color: #ff0000;">6</span>) und legen als Pfad im Dialog den Ordner fertige Bilder (ROAE-Tutorial/fertige-Bilder) fest (<span style="color: #ff0000;">7</span>). Hier muss <em>&#8220;Speichern unter&#8221; in Aktionen überschreiben</em> aktiviert werden (<span style="color: #ff0000;">8</span>), da sonst die Dateien überschrieben werden.</p>
<p>Im Bereiech <em>Dateibennenung </em>legen Sie bitte folgendes fest: <em>Dokumentenname </em>(<span style="color: #ff0000;">9</span>) + <em>_</em> (<span style="color: #ff0000;">10</span>) + Dreistellige Seriennummer (<span style="color: #ff0000;">11</span>) + <em>Erweiterung </em>(<span style="color: #ff0000;">12</span>). Die Anfangsseriennummer sollte den Wert <em>1</em> haben (<span style="color: #ff0000;">13</span>)</p>
<p><span style="text-decoration: underline;">Fehler</span></p>
<p>Im Bereich <em>Fehler </em>wählen Sie <em>Bei Fehlern anhalten</em> (<span style="color: #ff0000;">14</span>)</p>
<p><strong>Starten und Resultat</strong></p>
<p>Nachdem Sie all diese Einstellungen vorgenommen haben, klicken Sie auf OK (<span style="color: #ff0000;">15</span>). Kurz darauf können Sie Photoshop bei der Arbeit zuschauen, wie innerhalb weniger Sekunden die Bilder erstellt  und im Ordner fertige Bilder abgelegt werden:</p>
<div id="attachment_676" class="wp-caption aligncenter" style="width: 347px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/fertige_bilder1.jpg" rel="lightbox[562]"><img class="size-full wp-image-676" title="fertige_bilder" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/03/fertige_bilder1.jpg" alt="" width="337" height="197" /></a><p class="wp-caption-text">Die fertigen Bilder, automatisch generiert von Photoshop</p></div>
<p>Sie können nun natürlich die das Logo oder die Orginal-Bilder durch ihre eigenen ersetzen. Auch können Sie die Aktion anpassen und z.B. die Vorschaubilder mit abgerundeten Ecken versehen.</p>
<p>Für Fragen, Hinweise und Anmerkungen kann wie immer die Kommentarfunktion benutzt werden.</p>
<p><strong>Siehe auch</strong></p>
<ul>
<li><a href="http://blog.root-of-all-evil.com/2010/02/thumbnails-erzeugen-und-durchschnittsfarbe-in-php-ermitteln/">Thumbnails erzeugen und Durchschnittsfarbe in PHP ermitteln</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.root-of-all-evil.com/2010/04/automatisieren-stapelverarbeitung-mit-adobe-photoshop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Thumbnails erzeugen und Durchschnittsfarbe in PHP ermitteln</title>
		<link>http://blog.root-of-all-evil.com/2010/02/thumbnails-erzeugen-und-durchschnittsfarbe-in-php-ermitteln/</link>
		<comments>http://blog.root-of-all-evil.com/2010/02/thumbnails-erzeugen-und-durchschnittsfarbe-in-php-ermitteln/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 19:36:22 +0000</pubDate>
		<dc:creator>Philipp</dc:creator>
				<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Guides]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Durchschnittsfarbe]]></category>
		<category><![CDATA[Imagecolorat]]></category>
		<category><![CDATA[Imagecopyresampled]]></category>
		<category><![CDATA[Thumbnails generieren]]></category>

		<guid isPermaLink="false">http://blog.root-of-all-evil.com/?p=435</guid>
		<description><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/02/thumbnails-erzeugen-und-durchschnittsfarbe-in-php-ermitteln/" title="Thumbnails erzeugen und Durchschnittsfarbe in PHP ermitteln"></a>Eines meiner etwas zurückliegenden Projekte zwang mich externe Bilder durch meinen Server zu laden, zu verkleinern und schließlich auch die Durchschnittsfarbe zu berechnen. Aus Gründen der Performancesteigerung war ich nie ein Fan davon die Durchschnittsfarbe Pixel für Pixel des Originalbildes &#8230;<p class="read-more"><a href="http://blog.root-of-all-evil.com/2010/02/thumbnails-erzeugen-und-durchschnittsfarbe-in-php-ermitteln/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/02/thumbnails-erzeugen-und-durchschnittsfarbe-in-php-ermitteln/" title="Thumbnails erzeugen und Durchschnittsfarbe in PHP ermitteln"></a><p>Eines meiner etwas <a title="qolors.net Visual Bookmarking" href="http://www.qolors.net" target="_blank">zurückliegenden Projekte</a> zwang mich externe Bilder durch meinen Server zu laden, zu verkleinern und schließlich auch die Durchschnittsfarbe zu berechnen. Aus Gründen der Performancesteigerung war ich nie ein Fan davon die Durchschnittsfarbe Pixel für Pixel des Originalbildes zu berechnen. <a href="http://blog.root-of-all-evil.com/2010/02/thumbnails-erzeugen-und-durchschnittsfarbe-in-php-ermitteln#durchschnittsfarbe" title="zum Berechnen der Durchschnittsfarbe springen">Es gibt eine viel elegantere und fast genauso exakte Lösung</a>:</p>
<p><span id="more-435"></span>Unser Ziel: Wir möchten ein Bild (jpg, gif, png) über einen HTTP-Stream laden,  dieses lokal auf dem Server speichern, ein entsprechendes Thumbnail  (eine verkleinerte Version) erzeugen, speichern und schlussendlich die  dominierende &#8211; oder auch durchschnittliche &#8211; Farbe im Bild berechnen und  abspeichern. Eventuell möchten wir zusätzlich alles in einer Datenbank  hinterlegen &#8211; das soll aber zunächst außerhalb unserer Betrachtung  liegen.</p>
<p>Für das Berechnen der Durchschnittsfarbe gibt es einen wunderbar  einfachen Trick. Doch dazu später mehr. Beginnen wir zunächst einmal mit  einer Konstante und einer Funktion, die wir später noch benötigen:</p>
<pre class="php" title="code">DEFINE('CTX', stream_context_create(array(
    'http' =&gt; array(
        'timeout' =&gt; 20,
        'method' =&gt; 'get',
        'header' =&gt; 'Referer: XYZ'
    )
)));</pre>
<p>Unsere Konstante CTX ist also ein array. Wir benötigen es für unsere  HTTP-Anfrage, mit der wir das gewünschte Bild auf unseren Server laden.  Für diese Anfrage verwenden wir die HTTP-GET-Methode, definieren einen  Timeout von maximal 20 Sekunden und senden einen Referer im Header, den  ich hier mal einfach nur &#8220;XYZ&#8221; genannt habe.</p>
<pre class="php" title="code">function randomstring_creator($len = 20) {
    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    $string = '';
    mt_srand((double) microtime() * 1000000);
    for($i = 0; $i &lt; $len; $i++) {
        $string .= $chars{mt_rand(0, strlen($chars))};
    }
    return($string);
}</pre>
<p>Die Funktion randomstring_creator() generiert uns eine zufällige Zeichenfolge mit einer beliebigen Länge. Wir benötigen diese Funktion, da wir in diesem Beispiel die Bilder lokal unter einem zufälligem Namen speichern werden.</p>
<p>Weiter geht es mit unseren Klassen. Beginnen wir mit der Klasse <em>Image</em>:</p>
<pre class="php" title="code">class Image {
    var $img;
    var $source;
    var $local;
    var $dimX;
    var $dimY;
    var $avg_colour;
    function get($source, $quality = 90) {
// siehe unten
    }
    function calc_avg_colour() {
// siehe unten
    }
}</pre>
<p>Unsere Klasse besitzt also die Eigenschaften <em>source </em>(die Url,  von der das Bild stammt), <em>local </em>(den lokalen Speicherpfad), <em>dimX</em>,  <em>dimY </em>(die Abmessungen des Bildes in Pixel) und <em>avg_colour</em> (den farblichen Durchschnittswert als HEX-Code in der Form rrggbb). Die  Eigenschaft <em>img </em>ist eine Referenz auf das Image-Objekt, dass ich  aber später noch näher beleuchten werde.</p>
<p>Die beiden Funktionen <em>get()</em> und <em>calc_avg_colour()</em> der  Klasse sollten selbsterklärend sein. Mit der Funktion <em>get()</em>, die  gleichzeitig auch als Konstruktor dient, laden wir das Bild, dass unter <em>source </em>zu finden ist, auf unseren Server und speichern es in der  gewünschten JPEG-Qualität (90 als Standard) lokal.</p>
<p><em>calc_avg_colour()</em> berechnet &#8211; wie der Name schon sagt &#8211; die  Durchschnittsfarbe des in der Eigenschaft <em>img</em> gespeicherten  Bildes.</p>
<p>Wir wollen zusätzlich aber auch kleine Abbilder des Originalbildes  erstellen und erweitern dazu unsere <em>Image</em>-Klasse um die Klasse <em>Thumbnail</em>:</p>
<pre class="php" title="code">class Thumbnail extends Image {
    function create($parent, $X = 300, $Y = 300, $quality = 60) {
// siehe unten
    }
}</pre>
<p>Diese Erweiterung besitzt zunächst nur eine Funktion, mit der das  Thumbnail erstellt wird. Die übergebene Variable <em>parent </em>enthält  dabei eine bereits existierende <em>Image</em>-Klasse, die  herunterskaliert werden soll. Die maximale Breite und Höhe werden mit  den Variablen <em>X</em> und <em>Y</em> (standard bei 300 Pixel) übergeben.  Die JPEG-Qualität beträgt standardmäßig nur 60.</p>
<p>Das eigentliche Programm sieht dann nur noch so aus:</p>
<pre class="php" title="code">$imgurl = 'original.jpg';
// neues Objekt der Klasse Image erzeugen
$img = new Image;
// Bild aus der imgurl laden
if($img-&gt;get($imgurl)) {
    // ein Objekt der Klasse Thumbnail erzeugen
    $thumb = new Thumbnail;
    // und ein Thumbnail des oben definierten Objektes der Klasse Image generieren
    $thumb-&gt;create($img, 300, 300);
    // dann noch die Durschschnittsfarbe berechnen
    $thumb-&gt;calc_avg_colour();
    // und Daten ausgeben... fertig
    echo('Image: ' . $img-&gt;source . "\n");
    echo('Thumbnail: ' . $thumb-&gt;source . "\n");
    echo('Average colour: #' . $thumb-&gt;avg_colour . "\n");
} else {
    echo('Could not get the image.');
}</pre>
<p>So, dann sehen wir uns also mal unsere Funktionen der Klassen an.  Beginnen wir mit der Funktion <em>get()</em>:</p>
<pre class="php" title="code">function get($source, $quality = 90) {
    $this-&gt;source = $source;
    // wir laden das Bild von $source:
    if(($file = file_get_contents($this-&gt;source, false, CTX))) {
        // wenn erfolgreich, erzeugen wir mit den geladenen Daten
        // ein neues Bild und speichern dieses in der Eigenschaft img
        $this-&gt;img = imagecreatefromstring($file);
        // wir lesen die Höhe und Breite des Bildes aus
        $this-&gt;dimX = imagesx($this-&gt;img);
        $this-&gt;dimY = imagesy($this-&gt;img);
        // und speichern das Bild unter zufälligem Namen mit imagejpeg lokal im Ordner "raw"
        $this-&gt;local = 'raw/' . randomstring_creator() . '.jpg';
        imagejpeg($this-&gt;img, $this-&gt;local, $quality);
        // bei Erfolg true zurückgeben
        return(true);
    } else {
        // false, wenn das Bild nicht geladen werden konnte
        return(false);
    }
}</pre>
<p>Ein Thumbnail erzeugen wir mit dieser Funktion der Klasse <em>Thumbnail</em>:</p>
<pre class="php" title="code">function create($parent, $X = 300, $Y = 300, $quality = 60) {
    // zunächst die vorläufigen Abmessungen speichern
    $this-&gt;dimX = $X;
    $this-&gt;dimY = $Y;
    // die Abmessungen und deren Verhältnis des Originalbildes holen
    $origX = $parent-&gt;dimX;
    $origY = $parent-&gt;dimY;
    $ratio = $origX / $origY;
    // wenn das Originalbild breiter als hoch ist, kürzen wir die Höhe
    if($X / $Y &gt; $ratio) {
        $this-&gt;dimX = $Y * $ratio;
    } else {
    // wenn das Originalbild höher als breit ist, kürzen wir die Breite
        $this-&gt;dimY = $X / $ratio;
    }
    // hier erstellen wir ein neues Bild mit den oben berechneten Abmessungen
    $this-&gt;img = imagecreatetruecolor($this-&gt;dimX, $this-&gt;dimY);
    // und kopieren das Originalbild einfach in das eben erstellte kleinere, dabei wird es verkleinert
    imagecopyresampled($this-&gt;img, $parent-&gt;img, 0, 0, 0, 0, $this-&gt;dimX, $this-&gt;dimY, $origX, $origY);
    // jetzt speichern wir das neue Thumbnail noch unter zufälligem Namen im Ordner "thumb"
    $this-&gt;source = $parent-&gt;local;
    $this-&gt;local = 'thumb/' . randomstring_creator() . '.jpg';
    imagejpeg($this-&gt;img, $this-&gt;local, $quality);
}</pre>
<p>Das Herzstück: Wir wollen die  Durchschnittsfarbe ermitteln. Dazu könnten wir einfach alle Farbwerte  aller Pixel zusammen addieren und dann durch die Anzahl der Pixel  teilen. Bei einem Thumbnail von der Größe 300 x 300 Pixel, würden wir  aber eine Schleife mit 90.000 Durchläufen benötigen. Es gibt einen  besseren Weg &#8211; einen ganz logischen Trick.<br />
<a name="durchschnittsfarbe"></a><br />
<h3>Durchschnittsfarbe berechnen</h3>
<p>Wir haben oben beim Erstellen des Thumbnails die Funktion <em>imagecopyresampled()</em> verwendet. Was wenn wir unser Thumbnail einfach auf eine Größe von 1&#215;1  Pixel skalieren? Genau: Es bleibt ein Pixel mit der Durschnittsfarbe  übrig. Dessen Farbe auszulesen ist mit <em>imagecolorat()</em> dann nur  noch eine Kleinigkeit. Los gehts:</p>
<pre class="php" title="code">function calc_avg_colour() {
    // ein temporäres Bild mit den Abmessungen 1x1 Pixel erstellen
    $avrg = imagecreatetruecolor(1, 1);
    // Das Thumbnail einfach reinkopieren, dabei auf 1x1 Pixel skalieren
    imagecopyresampled($avrg, $this-&gt;img, 0, 0, 0, 0, 1, 1, $this-&gt;dimX, $this-&gt;dimY);
    // Die Farbe des verbleibenden Pixels auslesen
    $rgb = imagecolorat($avrg, 0, 0);
    // Das temporäre Bild wieder löschen
    imagedestroy($avrg);
    // Und die Farbe in HEX umwandeln
    $r = dechex($rgb &gt;&gt; 16);
    $g = dechex($rgb &gt;&gt; 8 &amp; 255);
    $b = dechex($rgb &amp; 255);
    if(strlen($r) &lt; 2) $r = 0 . $r;
    if(strlen($g) &lt; 2) $g = 0 . $g;
    if(strlen($b) &lt; 2) $b = 0 . $b;
    // tataaaa... da ist unsere Durchschnittsfarbe:
    $this-&gt;avg_colour = $r . $g . $b;
}</pre>
<p>Super. Das wäre es. Ende und aus.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.root-of-all-evil.com/2010/02/thumbnails-erzeugen-und-durchschnittsfarbe-in-php-ermitteln/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

