PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Banner Wächsel ind Sig



ZeKeE
28.05.2005, 21:40
Hallo alle zusammen.
Ich wolte fragen wie das PHP Skript lautet wo z.B. NPC als Banner Rotatiion Verwendet?

mfg Sekar

dead_orc
29.05.2005, 08:17
So wie's aussieht, ist das kein PHP-Skript, sondern ein PNG. Wie man solche PNGs, die bei jedem Aufruf was anderes anzeigen, erstellt, weiß ich nicht. Aber ein Prototypen eines PHP-Skripts kann ich hier mal schnell zusammenschustern:

<?php
header('Content-Type: image/png');
$bilder = array('bild1.png', 'bild2.png', 'drittes.png');
srand((double)microtime()*1000000);
$bildnr = rand(0, count($bilder) - 1);
echo file_get_contents($bilder[$bildnr]);
?>
Die einzige Vorraussetzung für dieses Skript sollte sein, dass nur PNGs verwendet werden (was theoretisch auch durch entfernen des Content-Headers aufgehoben werden könnte, da fast alle gängigen Browser bei einem IMG-Element automatisch von einem Bild ausgehen und sich den richtigen Mime-Type suchen). Die zu wechselnden Bilder werden im Array $bilder gespeichert, per Zufall durch rand() ausgewählt und deren Inhalt, der durch file_get_contents() ermittelt wird, ausgegeben.
Trotz der mir zumindest hier richtig erscheinenden Erklärung kann das Skript natürlich auch nix anderes als Fehlermeldungen produzieren ;)

Manni
29.05.2005, 08:24
Ich würde es wie der Ork machen, bis darauf, dass ich die Zeile

echo file_get_contents($bilder[$bildnr]);
durch folgende ersetzen würde:

header("Location: ".$bilder[$bildnr]);
Das ist imo sinnvoller, weil ich mir nicht sicher bin, ob man mit file_get_contents() wirklich alle Zeichen bekommt, oder ob unlesbare (also die Ascii-Zeichen bis 30) einfach ignoriert werden...

dead_orc
29.05.2005, 08:31
Hm, bei mir hat das so IIRC immer richtig funktioniert.
Aber wenn man es so macht wie du, sollte man sich an die Standards halten (mach ich zwar auch nie, aber egal):

header('Location: http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/" . $bilder[$bildnr]);
Denn laut der PHP-Dokumentation zu header() (http://de.php.net/header) sollte man besser absolute URIs verwenden (oder?)

Jesus_666
29.05.2005, 11:46
So wie's aussieht, ist das kein PHP-Skript, sondern ein PNG. Wie man solche PNGs, die bei jedem Aufruf was anderes anzeigen, erstellt, weiß ich nicht.
Kann man nicht. Wahrscheinlich hat NPC einfach einen Ordner namens "dateiname.png" erstellt und da die index.php reingetan, die das Bild zurückgibt. Das ist ein recht bekannter Trick, um dynamiche Bilder in Foren zu verwenden, die nur bestimmte Dateiendungen in der Sig/dem Ava erlauben.


Es ist übrigens problemlos möglich, verschiedene Quellformate zu verwenden, aber etwas aufwendig. Man muß das Quellbild erst auslesen und dann als neues Bild ausgeben.

Man kann beliebige Bilder laden, indem man folgende Funktion verwendet:

function LoadImage($image)
{
$type = exif_imagetype ($image); // Liest die ersten Bytes der Datei und bestimmt so den Dateityp
switch ($type)
{
case "3":
$return = imagecreatefrompng ($image);
break;
case "2":
$return = imagecreatefromjpeg ($image);
break;
case "1":
$return = imagecreatefromgif ($image);
break;
default:
$return = imagecreate(1,1); // Das Bild hat ein nicht unterstütztes Format
break;
}

return $return;
}

Das gesamte Skript könnte dann so aussehen:

<?
header("Content-Type: image/png");

$bilder = array('bild1.png', 'bild2.jpg', 'drittes.gif');
// Der Aufruf von srand() ist nur bei PHP < 4.2.0 nötig
$bildnr = rand(0, count($bilder) - 1);
$im = LoadImage($bilder[$bildnr]);
ImagePNG($im);

function LoadImage($image)
{
$type = exif_imagetype ($image);
switch ($type)
{
case "3":
$return = imagecreatefrompng ($image);
break;
case "2":
$return = imagecreatefromjpeg ($image);
break;
case "1":
$return = imagecreatefromgif ($image);
break;
default:
$return = imagecreate(1,1);
break;
}

return $return;
}
?>

Oder, kürzer:

<?
header("Content-Type: image/png");

$bilder = array('bild1.png', 'bild2.jpg', 'drittes.gif');
ImagePNG(LoadImage($bilder[rand(0, count($bilder) - 1)]));

function LoadImage($image)
{
$type = exif_imagetype ($image);
switch ($type)
{
case "3":
$return = imagecreatefrompng ($image);
break;
case "2":
$return = imagecreatefromjpeg ($image);
break;
case "1":
$return = imagecreatefromgif ($image);
break;
default:
$return = imagecreate(1,1);
break;
}

return $return;
}
?>

ZeKeE
06.06.2005, 11:35
ok eine frage.

Kan amn das auch so amchen das der (ich binutze nur PNG format)
die bilder automatisch aus einem ordner liest?

Also bei dean der hat doch auch sowas..

Jesus_666
06.06.2005, 11:40
Sicher doch. Sieh' dich mal auf php.net bei den Dateifunktionen um; wenn ich zuhause bin werde ich selbst mal suchen.

Du mußt dir im Wesentlichen alle Dateien geben lassen, per Zufallsvariable eine auswählen und die dann zurückgeben. Wenn man raushat, wie man sich alle Dateien besorgt, ist das einfach.

ZeKeE
06.06.2005, 12:21
Danke es hat funktionirt ^^
jezt klappt alles.

mfg Sekar