Benötigt:
- GDLib in der Version 2.0 oder höher
- Die Bilder müssen in einem der Formate PNG, GIF oder JPEG vorliegen
- Die Dateiendungen müssen folgendermaßen aussehen:
- GIF - .gif
- PNG - .png
- JPEG - .jpg
Anmerkung: Version 1.0.0 wird nichtmehr angeboten.
<?php //Mit diesesm Script könnt ihr euch mehrere Bilder aus einem Ordner zufällig ausgeben lassen //Es basiert auf dem Script von Chris!, wurde von mir aber etwas angepasst, um es auch in Foren etc. //als Signatur verwenden zu können. Überall, wo ein BBCode für Bilder erlaubt ist, könnt ihr auch diese Script verwenden. //Damit ihr eigene Bilder verwenden könnt, müsst ihr aber noch ein paar Dinge anpassen. Die Stellen hab ich //entsprechend kommentiert //Autor: http://www.bisaboard.de/index.php?page=User&userID=13391 //Support: http://www.bisaboard.de/index.php?page=Thread&threadID=95698 //Lizenz: http://www.gnu.org/licenses/gpl.html //Basis des Script: http://www.bisaboard.de/index.php?page=Thread&threadID=86156 //Version: 1.1.0 $Bilder = array(); $Ordner = "./bilder"; //hier müsst ihr den Ordner referenzieren, in dem die Bilder liegen., ausgehend vom Ordner, in dem das Script liegt $dateiendungen = array("png", "jpg", "gif"); //hier werden alle möglichen Dateiendungen angegeben $ordner = opendir($Ordner); while ($Datei = readdir($ordner)) { if (!is_dir($Datei)) { if ($Datei != "..") { if (strstr($Datei, ".")) { $punkt = strrpos($Datei, "."); $endung = strtolower(substr($Datei, $punkt + 1)); if (in_array($endung, $dateiendungen)) { $Bilder[] = $Ordner . "/" . $Datei; } } } } } closedir($ordner); srand((double)microtime() * 10000000); $index = array_rand($Bilder, 1); $image = $Bilder[$index]; if (strpos($image, ".jpg")) { header("Content-type: image/jpeg"); $image = imageCreateFromJPEG($image); imageJPEG($image,'',100); //falls ihr die Qualität des ausgegebenen JPG's ändern wollt, müsst ihr hier für 100 eine andere Zahl zwischen 0 und 100 (0 schlecht; 100 gut) angeben imageDestroy($image); } elseif (strpos($image, ".png")) { header("Content-type: image/png"); $image = imageCreateFromPNG($image); imagePNG($image); imageDestroy($image); } elseif (strpos($image, ".gif")) { header("Content-Type: image/gif"); $image = imageCreateFromGIF($image); imageGIF($image); imageDestroy($image); }?>
So, für die Erste Hälfte könnt ihr auch gerne in das andere Topic von Chris! schauen, dann kann ich mir das Erklären sparen^^
Nur den Part der für das zufällige auswählen des Bildes wurde von mir angepasst. Deswegen werden auch das array $nummern und die Variable $anzahl nicht mehr benötigt. Hier auch meinen dank an DaS SchaF bezüglich dieser Anpassung. Also, hier die Veränderte Zufallsauswahl:
<?php srand((double)microtime() * 10000000); $index = array_rand($Bilder, 1); $image = $Bilder[$index];?>
Also, mit der Funktion srand wird er Zufallsgenerator initalisiert. Um einen möglichst zufälligen Startwert zu bekommen, wird per microtime() die aktuelle Zeit als Timestamp in Micro-Sekunden ermittelt. Dieser Wert wird dann noch multipliziert, um eben eine sehr hohe Zahl zu erhalten. (double) deklariert den zurückgegebenen Wert übrigens als Fließkommazahl.
Per array_rand($Bilder, 1) wird jetzt ein zufälliger Index aus dem Array zurückgegeben. Wie array's funktionieren setzt ich hier einfach mal vorraus. Ansonsten schaut einfach mal in das PHP-Tutorial. Als Parameter erwartet die Funktion ein Array, hier also das array, in dem die Pfade zu den Bildern gespeichert sind und wie viele Indiezes zurückgegeben werden wollen. Hier ist natürlich nur ein Index sinvoll. Der zurückgegebene Wert wird dann in der Varibalen $index gespeichert.
Nun wird in $image ein Wert aus dem Array $Bilder gespeichert. Als Index wird der vorher zufällig bestimmte Index verwendet, der in der Variablen $index gespeichert ist.
Ich hab auchl nur beispielhaft eine der drei if-Abfrage-Blöcke rausgenommen, um euch zu erklären, was die einzelnen Funktionen bewirken. Ein paar Hinweise seht ihr ja auch als Kommentar im Script. Also:
<?php
elseif (strpos($image, ".gif")) {
header("Content-Type: image/gif");
$image = imageCreateFromGIF($image);
imageGIF($image);
imageDestroy($image);
}
?>
Alles anzeigen
Also, mit der funktion strpos($image, ".gif") wird überprüft, ob der String .gif bestandteil des in $image gespeicherten Strings ist. Falls nein, wird FALSE zurückgegeben, was automatisch bewirkt, dass zum nächsten Anfrage-Block gesprungen wird. Falls ja, wird hingegen die Position des ersten Zeichens der gefundenen Zeichenkette zurückgegeben. Da jeder Werte, der größer oder gleich 1 als TRUE interpretiert wird, wird in diesem Fall der Abfrage-Block ausgeführt.
Wird der Abfrage-Block ausgeführt, wird erstmal mit der header-Funktion der korrekte MIME-Type an den Browser übermittelt.
Mit der Funktion imageCreateFromGIF($image) wird aus dem in $image gespeicherten Pfad ein Bild erzeugt und in den Arbeitsspeicher geladen. Selbes übernehmen die Funktionen imageCreateFromPNG bzw. JPEG nur eben für die anderen Formate in den anderen Abfrageblöcken. Das Bild im RAM wird dann wieder in der Variablen $image gespeichert.
Die Funktion imageGIF($image) gibt dann das Bild aus. Wieder übernehmen die Funktionen imagePNG bzw. JPEG das selbe für die anderen Formate. Nur den Hinweis bei der JPEG-Funktion solltet ihr beachten.
Als letztes wird dann das Bild mit der Funktion imageDestroy($image) aus dem Arbeitsspeicher gelöscht.
So, dies ist die aller erste Version des Script. In einer kommenden Version möchte ich das Script auf jedenfall moderner gestalten. Vielleicht biete ich in naher Zukunft auch noch einen Webservice an, wo ihr nur die gewünschten Bilder hochladen müsst und dann einen passenden Link erhaltet.