zufällige Bilderanzeige

Da in Foren häufig gefragt wird, wie man zufällig ein Bild in eine Seite einbinden kann und ich so ein Script Anfang 2005 mal geschrieben habe wollte ich das mal online stellen damit ich es nur noch verlinken muss.

Da es normalerweise nicht wichtig sein dürfte, dass bei wirklich jedem Seitenaufruf ein unterschiedliches Bild angezeigt wird, lässt sich das Problem auch mit Javascript lösen wenn man keine serverseitige Programiersprache zur Verfügung hat.
Unten habe ich dann noch Lösungsmöglichkeiten für serverseitige Programmierung (mit PHP, Python und Perl) aufgeführt.

Javascript

<script type="text/javascript">
// <![CDATA[
var bilder = new Array(
  'bild1.jpg',
  'bild2.jpg',
  'bild3.jpg',
  'bild4.jpg',
  'bild5.jpg'
);
var nr = Math.floor(Math.random()*bilder.length);
document.write('<p><img src="'+bilder[nr]+'" alt="" /><\/p>');
// ]]>
</script>
<noscript>
<p><img src="bild1.jpg" alt="" /></p>
</noscript>

Der Code kann an der Stelle in den Code eingebaut werden, an der das Bild angezeigt werden soll (wenn gewünscht, kann noch ein width-Attribut in die img-Elemente eingebaut werden). Im Array »bilder« werden die verfügbaren Bilder eingebaut (ggf. mit Pfad), in der vorletzen Zeile wird das Bild angegeben, dass angezeigt wird wenn der User kein Javascript hat (bzw. es deaktiviert hat).

PHP

$bilder = array(
  'bild1.jpg',
  'bild2.jpg',
  'bild3.jpg',
  'bild4.jpg',
  'bild5.jpg'
);
echo '<img src="'.$bilder[array_rand($bilder)].'" alt="" />';

Das Prinzip ist im Prinzip das gleiche wie bei der Javascript-Lösung, nur dass kein Alternativbild eingebaut werden muss. Das Ermitteln eines zufälligen Bildes macht hier die Funktion array_rand().

Im Folgenden noch ein kleines Script, das aus dem angegebenen Verzeichnis die Bilder holt und eines davon ausgibt. Die Zeile mit dem getimagesize() ist optional, sie dient dazu im img-Element die width- und height-Attribute einzubauen.

$verzeichnis = './icons/'; # das Verzeichnis aus dem die Dateien kommen sollen
$gesuchtetypen = array('jpg','jpeg','gif','png'); # die erlaubten Endungen

$dateinamen = array();
$dh = opendir($verzeichnis);
while($file = readdir($dh)){
    if($file == '.' or $file == '..'){
        continue;
    }
    $ext = strtolower(substr($file,strrpos($file,'.')+1));
    if(!in_array($ext,$gesuchtetypen)){
        continue;
    }
    $dateinamen[] = $file;
}
closedir($dh);
$bild=$dateinamen[array_rand($dateinamen)];
$groesse = getimagesize($verzeichnis.$bild);
echo '<img src="'.$verzeichnis.$bild.'" '.$groesse[3].' alt="" />';

Python

import random
bilder = ['bild1.jpg', 'bild2.jpg', 'bild3.jpg', 'bild4.jpg', 'bild5.jpg']
key = random.randint(0,len(bilder)-1)
print '<img src="'+bilder[key]+'" alt="" />'

Perl

my @bilder = ('bild1.jpg', 'bild2.jpg', 'bild3.jpg', 'bild4.jpg', 'bild5.jpg');
my $key = int rand scalar @bilder;
print '<img src="'.@bilder[$key].'" alt="" />';

bei den Python und Perl Beispielen wurden evtl. noch zusätzlich nötige Teile wie shebang oder Header weggelassen.