Tweet | ![]() |
PHP Funktion: Vorschaubilder/Thumbnails erzeugen
-
Heute gibt es mal wieder etwas nützliches für die Programmierer unter euch! 🙂 Lässt man Besucher oder Nutzer mit dem eigenen Script Bilder hochladen wird es die verschiedensten Ergebnisse geben: Einige laden vielleicht nur ein Icon hoch, andere haben das Bild schon verkleinert und die letzten versuchen einfach das Originalbild von der Kamera mit einer Größe von 5MB und höher hochzuladen.
Will man die Bilder dann z.B. als Avatar oder ähnliches ausgeben, müssen die großen Fotos als Beispiel in ihrer vollen Größe geladen werden um sie dann klein ausgeben zu lassen. Das die Ladezeiten sich dadurch drastisch erhöhen ist wohl jedem klar :D.
Abhilfe schaffen dabei Thumbnails oder auch Vorschaubilder, die man beim hochladen des Bildes sofort erzeugen lassen sollte. Da man dieses Problem öfter hat, habe ich mir eine Funktion zusammen gebastelt! :cool:!
Übergeben werden muss dieser nur das Originalbild ($image) (also das soeben hochgeladene), dann der Pfad wo das neue Bild gespeichert werden soll ($target) und zum Schluss die maximale Breite ($max_width) und Höhe ($max_height).
Die Funktion:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
// FUNKTION: Bilder auf passende Höhe und Breite verkleinern (Nur .jpg, .png und .gif) function vorschaubild_erzeugen($image, $target, $max_width, $max_height) { // Funktion von IT-Runde.de $picsize = getimagesize($image); if(($picsize[2]==1)OR($picsize[2]==2)OR($picsize[2]==3)) { if($picsize[2] == 1) { $src_img = imagecreatefromgif($image); } if($picsize[2] == 2) { $quality=100; $src_img = imagecreatefromjpeg($image); } if($picsize[2] == 3) { $quality=9; $src_img = imagecreatefrompng($image); } $src_width = $picsize[0]; $src_height = $picsize[1]; $skal_vert = $max_height/$src_height; $skal_hor = $max_width/$src_width; $skal = min($skal_vert, $skal_hor); if ($skal > 1) { $skal = 1; } $dest_height = $src_height*$skal; $dest_width = $src_width*$skal; $dst_img = imagecreatetruecolor($dest_width,$dest_height); imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height); if($picsize[2] == 1) { imagegif($dst_img, "$target"); } if($picsize[2] == 2) { imagejpeg($dst_img, "$target", $quality); } if($picsize[2] == 3) { imagepng($dst_img, "$target", $quality); } } }
Erst wird geschaut, welcher Dateityp verkleinert werden soll (deshalb sind auch nur gif, jpg und png-Bilder erlaubt). Danach wird ein neues Bild erzeugt aus dem originalen. Jetzt wird noch geschaut ob das Bild höher oder breiter ist und je nachdem werden die Seiten klein skaliert. Zum Schluss wird dann das errechnete Bild je nach Dateityp auf dem selbst definierten Pfad erzeugt.
Welche Vorteile hat meine Funktion?
- Maximale Breite/Höhe definieren (Das Bild ist nie Größer als man Platz definiert hat)
- Keine Verzerrung von kleinen Bildern
- Ausgabepfad kann selbst definiert werden
- Unterstützt jpg, gif und png Bilder
Ich benutze diese Funktion in einigen meiner Scripte und bisher wurden (Wenn man vorher alle nicht unterstützten Dateitypen abfängt) noch alle Bilder passend in Thumbnails umgewandelt. Ein Codebeispiel zur Übergabe wäre folgendes:
Wie verkleinert ihr bisher eure Bilder in Thumbnails? Habt ihr vielleicht sogar eine schlankere Funktion? Uns interessiert eure Meinung!Tweet
22.03.2012 um 18:47 Uhr
Sehr gut die Funktion!…
Mache das bisher immer total aufwändig, mit der Funktion wird ja sogar mein Code übersichtlicher!
Einfach nur Danke!
26.03.2012 um 22:40 Uhr
Sofort abgespeichert! 🙂
01.04.2012 um 08:28 Uhr
Ist übrigens sinnvoll den Kommentar für IDE´s besser darzustellen:
/**
* Kommentar
*
* param type $name Funktion
*/
10.12.2012 um 07:58 Uhr
Perfekte Lösung!
19.08.2014 um 19:22 Uhr
Wie rufe ich die die Funktion auf?
Danke!