Tutorials

Tutorial: Automatische Thumbnails mit TimThumb
22. Januar 2009

Tutorial: Automatische Thumbnails mit TimThumb

von Simon [webdemar] - 19 Kommentare

Im Webdesign allgemein und in WordPress-Themes ist es sehr praktisch, automatische Thumbnails eines Fotos zu erstellen und es in der Größe an das Layout anzupassen. So kann man z. B. auf der Startseite einen Thumb anzeigen und im Post selbst eine Großansicht – und alles mit einer Bilddatei.

Das Ganze hört sich kompliziert an, ist aber dank nützlicher Open-Source-Skripte heller Köpfe relativ einfach in eine Website zu integrieren.

Besagtes Skript, das ich häufig zum Image-Resizing nehme, heißt TimThumb und wurde ursprünglich für das WordPress-Theme Mimbo Pro geschrieben und letztes Jahr als Open-Source-Projekt für jedermann zugänglich gemacht.

Dem Skript TimThumb muss man lediglich sagen, welche Datei bearbeitet und wie diese ausgegeben werden soll. Folgende Parameter stehen dafür zur Verfügung.

Parameter:

  • w: width – Breite des Bildes
  • h: height – Höhe des Bildes
  • zc: zoom crop (0 oder 1) – Beschneidung des Bildes (wenn nötig)
  • q: quality (default ist 75 und max ist 100) – Ausgabequalität

Anwendung

<img src='/skripte/timthumb.php?src=/img/bild.jpg&h=180&w=180&zc=1&q=95' alt='' />

Bemerkung:
Im obigen Beispiel nehmen wir an, dass wir z. B. in einer index.html ein Bild eingefügt werden soll. Der Bilderordner ist /img/ und das Skript TimThumb liegt im Ordner /skripte/. Wir sprechen das Skript an und übergeben die nötigen Parameter.

Installation

  • Herunterladen des Skriptes – TimThumb
  • Erzeugen des Ordners /cache/ – muss im selben Ordner liegen wie timthumb.php und volle Schreibrechte (777) besitzen
  • Auch der Ordner, der TimThumb enthält, sollte volle Schreibrechte (777) besitzen
  • Optional: Um die Performance zu verbessern, kann die .htaccess noch erweitert werden

Automatische Thumbnails in einem WordPress-Theme

Unser Ziel ist es nun, einen Post mit einer Bilddatei zu erstellen und zum Einen einen Thumbnail und zum Anderen eine Großansicht dieses Bildes zu erzeugen.

Voraussetzungen sind:

  • Das Bild liegt im Ordner /img/ im Hauptverzeichnis der WordPress-Installation
  • timthumb.php liegt im Order (Chmod 777) /skripte/ des WordPress-Theme-Ordners
  • Der Ordner /skripte/ enthält den Unterordner (Chmod 777) /cache/

Damit wir das Bild mit dem Skript erfassen können, legen wir uns einen Post mit einem Spezialfeld namens ‘post-img’ an. Als Wert bekommt dieses Spezialfeld die URL des zu verarbeitenden Bildes (z. B. ‘http://webdemar.com/img/bild.jpg’).

Den Spezialfeld des Posts können wir innerhalb des Loops in unserem WordPress-Theme ausgeben – z. B. in der home.php (genauer möchte ich darauf an dieser Stelle nicht eingehen, da dies zu weit führen würde).

<?php echo get_post_meta($post->ID, 'post-img', true) ?>

Bemerkung:
Mit diesem Aufruf würde die URL des Bildes ausgegeben. Das machen wir uns zunutze und konstruieren damit die erforderliche Ausgabe (s. Anwendung) zum Ansprechen von TimThumb.

<img src='<?php bloginfo('template_url'); ?>/skripte/timthumb.php?src=<?php echo get_post_meta($post->ID, 'post-img', true); ?>&w=120&h=80&zc=1&q=95' width='120' height='80' alt='<?php the_title(); ?>' />

Bemerkung:
Hiermit geben wir das Bild, das wir im Spezialfeld des Posts angegeben haben, als Thumbnail 120x80px, wenn nötig zugeschnitten und in einer Qualität von 95 (von 100) aus.

Breite und Höhe lassen sich nun beliebig anpassen, so dass z. B. in der single.php des Themes dasselbe Bild mit einer Größe von 240x160px ausgegeben werden kann. Wichtig ist dabei, dass width und height des img-Tags ebenfalls angepasst werden.

Man kann das Ganze nun noch einen Schritt verbessern, indem man vor dem Aufruf des Bildes mit der URL aus dem Spezialfeld zunächst abfragt, ob dieses auch vorhanden ist. Wenn das Spezialfeld in einem Post leer bleibt, würde sonst ein img-Tag ohne src erzeugt.

<?php if(get_post_meta($post->ID, 'post-img', true)) { ?>
    <img src='<?php bloginfo('template_url'); ?>/skripte/timthumb.php?src=<?php echo get_post_meta($post->ID, 'post-img', true); ?>&w=120&h=80&zc=1&q=95' width='120' height='80' alt='<?php the_title(); ?>' />
<?php } // endif post-img ?>

Bemerkung:
Bei einem leeren Spezialfeld wird nun einfach nichts ausgegeben.

Fazit:

Mit TimThumb lassen sich also automatisch über das Theme gesteuert beliebig viele Thumbnails eines einzigen Bildes erstellen.

Relevante Links:

, ,

Simon [webdemar]

Moin, ich bin Simon und betreibe webdemar.com als meine ernstgemeinte Spielwiese für WordPress, Webdesign und so.

RSS abonnieren Twitter

16 Kommentare

  1. Sergej Müller - 24. Januar 2009 Antworten

    Schöner Tipp, werde heute im Laufe des Tages für einen Kundenprojekt einbauen. Gehe ich richtig in der Annahme, dass die bereits erzeugten Thumbs gecached werden, um die wiederholte Generierung zu ersparen? Sonst wäre ja der Ordner Cache nicht da, gell?

    P.S. Keine Benachrichtigung für Comments in deinem schicken Blog? ;)

  2. webdemar - 24. Januar 2009 Antworten

    Moin Sergej,

    ganz genau. Die einmal erzeugten Thumbs werden gecached. Das Skript ist echt schön einfach und lässt sich hervorragend in WordPress integrieren.

    P.S.: Danke für die Erinnerung. Jetzt weiß ich, was ich noch tun wollte. :-)

  3. Sergej Müller - 24. Januar 2009 Antworten

    Danke für die Auskunft.

  4. Sebastian - 30. Januar 2009 Antworten

    da ist deine annahme richtig ;)

  5. Simon [webdemar] - 31. Januar 2009 Antworten

    Na, denn sind wir uns ja alle einig :-)

  6. Nick - 24. Juni 2009 Antworten

    Hallo,

    super Artikel!
    Nun wollte ich aber nicht auf den Bilderuploder von Wp verzichten.
    Wenn ich das richtig sehe müsste ich alle meine Bilder in einen Ordner hochladen und selbst einstellen(breite und höhe).

    Jetzt habe ich mir den Code so umgeschrieben das, dass Bild 1. verlinkt und 2. automatisch das hochgeladene aus dem Post nimmt.

    Leider klappt es nicht und ich weiß nicht woran es liegen soll, vllt. hat jemand von euch einen Tipp!
    Hier der Code im Template:

    " rel="bookmark" title="Permanent Link to < ?php the_title_attribute(); ?>">&w=175&h=117&zc=1" alt="< ?php the_title(); ?>" />
    
    • Simon [webdemar] - 24. Juni 2009 Antworten

      Hey Nick,

      auf den Uploader brauchst Du auch nicht zu verzichten. Du lädst das Bild ganz normal über den Image-Editor hoch. Anstatt es jedoch in den Artikel einzufügen, kopierst Du Dir nur die URL (bei Link des Bildes -> Datei-URL) und setzt diese in das Custom Field ein.

      Wenn Du die Schreibrechte richtig gesetzt hast, kann ich schwer sagen, woran es liegen könnte. In Deinem Code kann ich auf den ersten Blick keinen Fehler erkennen. Hast Du mal ne URL zur Seite, wo Du das Skript im Einsatz hast?

  7. Denis - 15. August 2009 Antworten

    Sehr guter Tipp, danke dafür :)

  8. Oli - 10. September 2009 Antworten

    super Tut! würde nur das echo – wenn er die meta Daten abfragt – weglassen

  9. Holgee - 7. November 2009 Antworten

    Danke für dieses schöne Tutorial ! Habe schon einige Zeit damit verbracht, eine derartige Lösung zu finden ! Funktioniert einwandfrei !!!

  10. schaefchen - 13. November 2009 Antworten

    Habe mimbo und das timthumb, allerdings quetscht er die Bilder in das festgelegte Format. Wie kann ich es machen, daß die ursprünglichen Proportionen beibehalten werden und bei bestimmten Ansichten nur eine bestimmte Breite ODER Höhe angezeigt wird?

    • Simon [webdemar] - 13. November 2009 Antworten

      Du könntest dann jeweils die Höhen- oder Breitenangabe weglassen. Bei fester Breite also im Skriptaufruf die Höhe h=[deineHoehe] und im img-Tag height="[deineHoehe]" rausnehmen. Das funktioniert, ist aber kein valides HTML mehr, da img-Tags laut W3C immer Höhe und Breite brauchen.

  11. Andy Wendel - 4. Januar 2010 Antworten

    Hi und hallo,

    mein problem dabei ist, daß meine Bilder abgeschniten werden – mal fehlen Teile des Kopfes etc.
    Was mache ich falsch?

    Danke für eine kurze RM

    Andy

  12. Stefan B. - 14. März 2010 Antworten

    Kann es sein, das dies unter WP 2.9.x nicht mehr funktioniert? Bei mir werden garkeine Bilder mehr angezeigt. Vor einigen Wochen hat es noch einwandfrei funktioniert. Ich habe auch schon mal die neueste Scriptdatei heruntergeladen und eingebunden – nichts …

  13. Tristan - 5. Juni 2010 Antworten

    Guten Tag

    ist das Script vor Fremdzugriff geschützt? Sprich kann es von einem anderen Server ausgeführt werden?

    gruß

3 Trackbacks

Deine Meinung

WordPress.org

© 2009-2010 webdemar.com - Professionelle WordPress Themes