Apr/087
[Archiv] PHP Tutorial: Thumbnails mit fester Größe und Rand
Ich habe gerade beim Aufräumen ein wenig in meinen Datensicherungen gewühlt und ein schönes Code-Schnipselchen von ~2004 gefunden. Es fühlt sich an, als wenn das eine Ewigkeit her ist, auf dem Papier sind es aber irgendwie doch “nur” vier Jahre.
Um die Zeit war ich in einer PHP-Community aktiv, im Rahmen einer Diskussion ist da irgendwann dieses kleine PHP-Script entstanden.
Das Script dient dazu aus Bildern im JPG-, GIF- oder PNG-Format Thumbnails (Vorschau-Bilder) zu erstellen. Soweit nichts besonderes. Das tolle an dem Snippet war, dass man eine feste Höhe UND Breite für das Bild angeben konnte, das Script hat das Thumbnail in dieser Größe erstellt und das Ursprungs-Bild unter Berücksichtigung der Seitenverhältnisse in dem Thumbnail abgebildet. Wenn das Bild nicht das komplette Thumnail ausfüllte, dann wurde dieses durch einen farbigen Rand ergänzt. Toll war das…
Mit Sicherheit würde ich das heute anders schreiben, ich möchte dieses Stück Code aber gerne so aufbewahren, wie es “damals” geschaffen wurde. Ich bin vor allem von der eifrigen Kommentierung beeindruckt, wobei da sicherlich einige Kommentare entbehrlich sind.
Hier also der besagte Code…
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | <?PHP //Dateipfad unter die Bilder liegen $pfad = './'; //Dateiname des Ursprungsbildes $bild = 'bild.gif'; //Dateiname des Thumbnails $thumb = 'bild_thumb.gif'; //Welche Breite soll das finale Thumbnail haben? $resWidth = 128; //Welche Höhe soll das finale Thumbnail haben? $resHeight = 96; //Wenn die Datei nicht existiert... if(!file_exists($pfad.$bild)) { //Ausgeben einer Fehlermeldung und Beenden des Scriptes die('Die angegebene Datei existiert nicht.'); } //Aulesen der Höhe,Breite und des Dateityps des Bildes $size = getimagesize($pfad.$bild); //Das erste Element des Arrays $size beinhaltet die Breite $width = $size['0']; //Das zweite Element des Arrays $size beinhaltet die Höhe $height = $size['1']; //Das zweite Element des Arrays $size beinhaltet den Typ $typ = $size['2']; switch($typ) { //Wenn das Bild ein GIF ist... case 1: //Erstellen des ursprünglichen Bildes $img = ImageCreateFromGIF($pfad.$bild); break; //Wenn das Bild ein JPG ist... case 2: //Erstellen des ursprünglichen Bildes $img = ImageCreateFromJPEG($pfad.$bild); break; //Wenn das Bild ein PNG ist... case 3: //Erstellen desursprünglichen Bildes $img = ImageCreateFromPNG($pfad.$bild); break; //Wenn die Datei kein GIF,JPG oder PNG ist... default: //Ausgeben einer Fehlermeldung und Beenden des Scriptes die('Sorry, das Dateiformat wird nicht unterstützt.'); break; } //Wenn die Breite größer ist als die Höhe... if($width > $height) { //Die Breite steht fest $thumbWidth = $resWidth; //Errechnen des Divisors $div = $width / $thumbWidth; //Errechnen der Höhe $thumbHeight = $height / $div; //Festlegen der X-Koordinate auf 0 $xAnfang = 0; //Errechnen der Y-Koordinate an denen das temporäre Bild in das finale Thumbnail eingefügt wird $yAnfang = ($resHeight - $thumbHeight) / 2; } //Wenn die Höhe größer ist als die Breite... elseif($height > $width) { //Die Höhe steht fest $thumbHeight = $resHeight; //Errechnen des Divisors $div = $height / $resHeight; //Errechnen der Höhe $thumbWidth = $width / $div; //Errechnen der X-Koordinate an denen das temporäre Bild in das finale Thumbnail eingefügt wird $xAnfang = ($resWidth - $thumbWidth) / 2; //Festlegen der Y-Koordinate auf 0 $yAnfang = 0; } //Wenn beide Seiten gleich lang sind... else { //Wenn die Breite größer ist als die Höhe... if($resWidth > $resHeight) { //Festlegen der Höhe des temporären Bildes auf die Höhe des finalen Bildes $thumbHeight = $resHeight; //Festlegen der Breite des temporären Bildes auf die Höhe des finalen Bildes $thumbWidth = $resHeight; } //Wenn die Höhe größer ist als die Breite... elseif($resHeight > $resWidth) { //Festlegen der Höhe des temporären Bildes auf die Breite des finalen Bildes $thumbHeight = $resWidth; //Festlegen der Breite des temporären Bildes auf die Breite des finalen Bildes $thumbWidth = $resWidth; } //Wenn beide Seite gleich sind... else { //Festlegen der Höhe des temporären Bildes auf die Höhe des finalen Bildes $thumbHeight = $resHeight; //Festlegen der Breite des temporären Bildes auf die Höhe des finalen Bildes $thumbWidth = $resHeight; } //Errechnen der X-Koordinate an denen das temporäre Bild in das finale Thumbnail eingefügt wird $xAnfang = ($resWidth - $thumbWidth) / 2; //Errechnen der Y-Koordinate an denen das temporäre Bild in das finale Thumbnail eingefügt wird $yAnfang = ($resHeight - $thumbHeight) / 2; } //Erstellen eines temporären Bildes um ein Thumbail des Bildes zu erstellen $tmpImg = ImageCreateTrueColor($thumbWidth,$thumbHeight); //Einfügen des Bildes in das temporäre Bild ImageCopyResampled($tmpImg,$img,0,0,0,0,$thumbWidth, $thumbHeight, $width, $height); //Das finale Thumbnail erstellen $resImg = ImageCreateTrueColor($resWidth, $resHeight); //Das neue Bild mit schwarz füllen ImageFill($resImg, 0, 0, ImageColorAllocate($resImg, 0, 0, 0)); //Das temporäre Bild in das Thumbnail einfügen imagecopymerge($resImg,$tmpImg,$xAnfang,$yAnfang,0,0,$resWidth,$resHeight,100); switch($typ) { //Wenn das Bild ein GIF ist... case 1: //Abspeichern des neuen Bildes ImageGIF($resImg,$pfad.$thumb); break; //Wenn das Bild ein JPG ist... case 2: //Abspeichern des neuen Bildes ImageJPEG($resImg,$pfad.$thumb); break; //Wenn das Bild ein PNG ist... case 3: //Abspeichern des neuen Bildes ImagePNG($resImg,$pfad.$thumb); break; } ?> |
ACHTUNG: Das Script wurde mit Sicherheit zu genüge getestet, ich habe es jetzt allerdings nicht noch einmal zum Leben erweckt.




























19:38 on April 19th, 2008
Vielen Dank für das tolle Skript. Ich werde es auf meiner künftigen Seite verwenden und zu diesem Post hier verlinken.
Gute Arbeit! MfG El_Schnorro
21:35 on October 5th, 2009
Tolles script! Danke danach hab ich lange gesucht, weil meine thumbnail datei immer alles zusammengepresst hat
20:20 on June 15th, 2011
Hey
tolles Skript, funktioniert spitze, jedoch möcht ich das thumbnail nicht schwarz sondern mit weiß füllen,
also statt: //Das neue Bild mit schwarz füllen ImageFill($resImg, 0, 0, ImageColorAllocate($resImg, 0, 0, 0));”
//Das neue Bild mit weiß füllen ImageFill($resImg, 0, 0, ImageColorAllocate($resImg, 255, 255, 255));”
Nun werden aber bei mir bilder die Höher als Breiter sind , nicht ganz weiß sondern nur die linke seite, bis zum Image
die rechte Seite bleibt schwarz. woran kann denn das liegen ? Und nochmals tolles script
!
13:12 on August 30th, 2011
Das mit den weißen Streifen hab ich auch, hat da eventuell jemand eine Lösung für? Ansonsten Danke für das Script.
15:30 on January 6th, 2012
Hallo, ich hatte das Problem mit dem Schwarzen Streifen auf der rechten Seite, wenn man das Bild weiss färben will. Ich habs folgendermassen gelöst: //Das temporäre Bild in das Thumbnail einfügen imagecopymerge($resImg,$tmpImg,$xAnfang,$yAnfang,0,0,$resWidth,$resHeight,100); // Schwarzen Balken mit weiss füllen ImageFill($resImg, ($xAnfang+$thumbWidth), 0, ImageColorAllocate($resImg, 255, 255, 255));
Also nach dem imagecopymerge() einfach nochmals den schwarzen Streifen mit weiss übermalt..
21:22 on January 20th, 2012
Seeehr gutes Script!!!
HAbe eeeetlich scripts gesucht, ausprobiert, und das ist das erste, welches so funktioniert, wie ich es mir vorstelle Viiieeeelen dank mein freund!!!