<?php //Wichtig erste Zeile und kein leerzeichen davor!!!
// Bemerkung: Die Idee mit dem cache ist von Kristian Köhntopp
// siehe http://db.geocrawler.com/archives/3/1/1999/3/0/1367510/
// Der Rest ist aus dem php-Buch von Markt&Technik und aus meinem Kopf :-)
// Michael Stahmann - web-xact <website-development> http://web-xact.de
// eMail: Michael@Stahmann.de
// Struktur
// root
// |
// |- dynimg Dieses Script (image5.php3) +
// | Zum einbinden der Palette (pal.php3)
// |- cache Zwischenspeicher für bereits erzeugte Bilder
// |- fonts Hierein die TrueType-Schriften kopieren
// |- pal Hier liegen die Farbpaletten
// Aufruf mit: <img scr="../dynimg/image.php3?f=arial&s=18&u=1&t=Dies+ist+ein+Text">
// f="Schriftart" im Verzeichnis fonts
// s="Groesse" in px
// u="1" wenn unterstrichen werden soll
// it="1" Gif-Bild = interlaced
// tp="1" Gif-Bild = transparent
// v="0" Index für Vordergrund
// h="216" Index für Hintergrund
// t="Text" der ausgegeben werden soll
// Erzeuge content-type header für GIF-Bild
Header("Content-type: image/gif");
// Der Pfad zum cache
$cachepath = "cache";
// Die Farbpalette (hier Websicher)
$pal = "pal/netscape.csv";
// Dieses Bild muß einen einmaligen Namen haben - wir generieren mit md5
// aus dem einz. Angaben zum Bild
if (!isset ($s)) $s="12"; // Ohne Angabe Grösse 12
if (!isset ($f)) $f="arial"; // Ohne Angabe Schrift Arial
if (!isset ($u)) $u="0"; // Ohne Angabe nicht unterstrichen
if (!isset ($tp)) $tp="nein"; // Ohne Angabe nicht transparent
if (!isset ($it)) $it="nein"; // Ohne Angabe non interlaced
if (!isset ($t)) $t="Dies ist ein Text"; // Ohne Angabe von Text zum testen
if (isset ($v) or isset ($h)) include ("pal.php3"); //Wenn gewunscht Palette einladen
if (!isset ($v)) {
$vr=0; // Ohne Angabe
$vg=0; // machen wir den
$vb=0; // Text Schwarz
}
else { //Palette anwenden
$vr=$farbe[$v]["r"];
$vg=$farbe[$v]["g"];
$vb=$farbe[$v]["b"];
}
if (!isset ($h)) {
$hr=255; // Ohne Angabe
$hg=255; // machen wir den
$hb=255; // Hintergund Weis
}
else { //Palette anwenden
$hr=$farbe[$h]["r"];
$hg=$farbe[$h]["g"];
$hb=$farbe[$h]["b"];
}
$mt = $t.$s.$f.$u.$tp.$it.$h.$v;
$hash = md5($mt);
$hashpath = "$cachepath/$hash.gif";
//Bildgroesse ermitteln und umrechenen
$size = ImageTTFBBox ($s, 0, "fonts/$f.ttf" , $t);
$dx = abs ($size[2] - $size[0]);
$dy = abs ($size[5] - $size[3]);
//Weil Kleinbuchstaben wie g,j,p,q und y größeres Bild erfordern
if(ereg('g|j|p|q|y',$t))
{$dz = (int)($s/3);
$dz2 = (int)($s/15);
}
else {
$dz=(int)($s/6);
$dz2 = (int)($s/20);
}
// Prüfen, ob Bild schon generiert, wenn ja
// schicken wir das statische Bild...
if (file_exists($hashpath)) {
readfile($hashpath);
exit;
}
// Wenn Bild noch nicht erstellt
// dann machen wir das jetzt...
$im = imagecreate($dx + $dz + ($dz2*2) ,$dy + $dz);
//Farben für Vorder- und Hintergrund
$hgfarbe = ImageColorAllocate($im, $hr,$hg,$hb);
$vgfarbe = ImageColorAllocate($im, $vr,$vg,$vb);
// True-Type Schrift erzeugen
ImageTTFText($im, $s ,0,(int)($dz/2), $dy + $dz2 , $vgfarbe, "fonts/$f.ttf", $t);
// Das Bild wird unterstrichen wenn u=1
if ($u == 1) ImageLine ($im, (int)($dz/2), $dy+$dz2+1, ($dx+$dz) ,$dy+$dz2+1, $vgfarbe);
// Gif Bild => interlaced
if ($it == 1) imageinterlace ($im,1);
// Hintergrund trasparent machen
if ($tp == 1) imagecolortransparent ($im, $hgfarbe);
// Hier wird das Bild gespeichert
ImageGif($im, $hashpath);
ImageDestroy($im);
// Das Generierte Bild wird geladen
readfile($hashpath);
//Wichtig: Letzte Zeile und kein Leerzeichen danach!!!
?>