Dynamische Signatur

Tutorial – Dynamische Signatur mit PHP

Hihihi, ist schon lustig was man manchmal so alles wiederfindet in den weiten des Internets. Ich hatte mich mal 2007 mit Dynamisch generierten Bildern mit PHP und GD befasst. Es ging darum eine Dynamische Signatur zu erstellen. Irgendwie fand ich ein kleines Tutorial dazu und fand es klasse was man damit alles anstellen konnte schließlich habe ich es dann erweitert. Durch Zufall fand heute mal wieder mein Scriptchen in irgend einem Forum und fand es wieder klasse. Ich selber hatte den Code auch gar nicht mehr und hatte ihn schon vergessen. Als ich Ihn dann heute wiedergefunden hatte sind mir auch meine Einfälle dazu wieder eingefallen, und so habe ich es etwas Überarbeitet. Ich wollte damit zum Beispiel immer den RSS-Feed meines Blogs anzeigen lassen, das habe ich heute mal eben eingebaut. Wenn man möchte kann man es auch ganz einfach per .htaccess von php z.B. in ein .png umschreiben lassen und hat so immer eine feine Forensignatur. Jedenfalls sofern Bilder in der Signatur zugelassen sind. Daher sollten die Bildchen auch nicht zu groß sein. In meinem Fall hier ist es eigentlich schon viel zu groß mit 400x205px, aber ich wollte einiges an Infos unterbringen für dieses Tutorial.

Vorbereitungen um ein Dynamisches Bild mit php zu erzeugen

Um dies machen zu können benötigt Ihr einige Dinge:

  • Einen Editor Eurer Wahl
  • Server mit GD
  • FTP Program

Um zu überprüfen ob GD auf dem Server installiert ist könnt Ihr diese Codezeilen verwenden und als gdinfo.php oder was auch immer auf den Server legen und aufrufen.


 

Wie kann man mit PHP eine Dynamische Signatur er?

Dynamische Signatur mit PHP zum Beispiel für Foren
Das ist eigentlich gar nicht so schwer, als erstes benötigt Ihr ein Hintergrund Bild, dazu habe ich einfach mein Androtux mit Gimp auf einem grünen Hintergrund Platziert (muss aber nochmal überarbeitet werden) Und es als bg.png benannt. Man kann aber ebenso ein .jpg oder .gif nehmen. Wenn Ihr eueren Hintergrund fertigt habt dann können wir nun mit dem PHP code beginnen. Als erstes müssen wir den Header bestimmen. In dem hier gzeigten Beispiel ist es ein .png, solltet Ihr ein .jpg oder .gif nehmen wollen dann einfach image/png gegen image/gif oder image/jpg tauschen. Im nächsten Schritt müsst Ihr es aber auch bei „$img = imagecreatefrompng(„$img“);“ in imagecreatefromgif oder imagecreatefromjpg ändern.

//Dateiheader
header("Content-type: image/png");

//Hintergrundbild 
$img = "bg.png";

//Bild Kreieren
$img = imagecreatefrompng("$img");

//Ein paar Text-Farben (sollte klar sein)
$white  = imagecolorallocate($img,255,255,255);
$black  = imagecolorallocate($img,0,0,0);
$red    = imagecolorallocate($img,255,0,0);

Das Waren ein paar Grundlegende Dinge, wie das Bestimmen des Dateihaeders, wichtig ist auch der Aufruf zum generieren des Bildes, wir haben bestimmt welches Bild als Hintergrund genommen werden soll und ein Paar Farben zum Formatieren der Schrift welche später auf der Signatur erscheinen soll. Die Farben der Schriften müsst Ihr natürlich auf Euer Hintergrundbildchen anpassen damit es später stimmig wird. Man könnte natürlich auch mehrere Hintergrundbilder bei $img = „bg.png , bg2.png… usw angeben und diese per Zufall eben aussuchen lassen.
Als nächstes könnten wir eine kleine Begrüßung abhängig der Tageszeit einbauen, vielleicht etwas witziges oder was auch immer Euch gefällt. OK…

// Dynamische Begrüssung
// Abfrage der momentanen Stunde (G -> 0-23)
$std = date("G");
// Vergleichsoperatoren für die Begrüßung
if     ($std >= 5 && $std < 9){          // von 5.oo Uhr bis 8.59 Uhr Guten Morgen
        $begruessung = "Guten Morgen!";}
elseif ($std >= 9 && $std <= 18) {       // von 9.oo Uhr bis 18.59 Uhr
        $begruessung = "Guten Tag! ";}
elseif ($std >= 19 && $std <= 23) {       // von 19.oo Uhr bis 23.59 Uhr
        $begruessung = "Guten Abend! ";}
else   {$begruessung = "Du solltest schlafen gehen!";}   // von 00.00 Uhr bis 4.59 Uhr

Im prinzip ganz einfach: Ist die $std größer gleich 5 oder kleiner gleich 9 sage diese Begrüßung, ansonsten… usw. Hier könnt Ihr selbstverständlich den Text ebenfalls nach belieben anpassen. Wer mag kann auch noch einfach ein paar Infos für den User anzeigen lassen, auch das ist sehr einfach. Wir lesen mal den Browser des Users aus.

// Auslesen der Browser (kann verfeinert werden ist alter Code)
if (ereg( 'MSIE',$_SERVER[HTTP_USER_AGENT])) {
if (strstr($_SERVER[HTTP_USER_AGENT],'MSIE 5.0')) {
$browser = "Internet Explorer 5";
} elseif (strstr($_SERVER[HTTP_USER_AGENT],'MSIE 5.5')) {
$browser = "Internet Explorer 5.5";
} elseif (strstr($_SERVER[HTTP_USER_AGENT],'MSIE 6.0')) {
$browser = "Internet Explorer 6";
} else {
$browser = "Internet Explorer";
}
} elseif (ereg( 'Opera',$_SERVER[HTTP_USER_AGENT])) {
$browser = "Opera";
}elseif (ereg( 'Chrome',$_SERVER[HTTP_USER_AGENT])) {
$browser = "Chrome";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Firefox")) {
$browser = "Firefox";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Safari")) {
$browser = "Safari";
} elseif (ereg("Lynx", $_SERVER["HTTP_USER_AGENT"])) {
$browser = "Lynx";
} elseif(ereg("WebTV", $_SERVER["HTTP_USER_AGENT"])) {
$browser = "WebTV";
} elseif(ereg("Konqueror", $_SERVER["HTTP_USER_AGENT"])) {
$browser = "Konqueror";
} elseif (ereg( 'Mozilla/([0-9].[0-9]{1,2})',$_SERVER[HTTP_USER_AGENT])) {
$browser = "Mozilla";
} else {
$browser = "Unknown";
}
// Auslesen der Betriebssysteme (kann verfeinert werden ist alter Code)
if (strstr($_SERVER[HTTP_USER_AGENT], "Windows 95")) {
$os = "Windows 95";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Windows 98")) {
$os = "Windows 98";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "NT 4.0")) {
$os = "Windows NT";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "NT 5.0")) {
$os = "Windows 2000";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "NT 5.1")) {
$os = "Windows XP";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Win")) {
$os = "Windows";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Mac")) {
$os = "MacOS";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Linux")) {
$os = "Linux";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "FreeBSD")) {
$os = "FreeBSD";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "SunOS")) {
$os = "SunOS";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "IRIX")) {
$os = "IRIX";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "BeOS")) {
$os = "BeOS";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "OS/2")) {
$os = "OS/2";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "AIX")) {
$os = "AIX";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Unix")) {
$os = "Unix";
} else {
$os = "Unbekanntest System";
}
// IP bestimmen und Host auslesen
$ip = getenv("REMOTE_ADDR");
$host = gethostbyaddr($ip);
//Datum Uhrzeit
$datum = date("d.m.Y");
$uhrzeit = date("H-i");

Eine weitere tolle Möglichkeit ist es evtl. den letzten Artikel aus dem Blog RSS-Feed auszulesen. Auch das ist keine große Sache.

//RSS-Feed
$rss_feed = simplexml_load_file("http://zu-deinem/feed/"); // URL zum RSS-Feed 
$cfg_news_count = 1; // Anzahl der Nachrichten 
$feed_info = $rss_feed->channel; 
$feed_news_items = $feed_info->item; //Array mit allen Newseintraegen im Feed
/* 
Quellen Titel: $feed_info->title // Titel der Quelle 
Quellen Link: $feed_info->link // URL zur Hauptseite der Quelle 
Beschreibung: $feed_info->description // Beschreibung der Quelle oder auch Art der Nachrichten 
*/
$i = 0; // kleiner Zaehler der die Anzahl der Nachrichten mitzaehlt
foreach($feed_news_items as $news_data) // Jeden Newseintrag im Array einzeln in einer Schleife durchgehen 
{ 
/* 
News Titel: $news_data->title // Titel der Nachricht 
News Link: $news_data->link // URL zur Quelle (Nachricht selber) 
News Text: $news_data->description // Der eigentliche Nachrichten Text (Zusammenfassung) 
News Datum: $news_data->pubDate // Zeitpunkt der Veroeffentlichung dieser Meldung 
$i++; // Nachrichtenzaehler um 1 erhoehen 
if($i == $cfg_news_count) // kontrollieren ob das Limit erreicht wurde 
break; // Schleife Abbrechen 
} 

Dynamische Signatur Ausgeben

Nun kümmern wir uns noch um die Ausgabe, welche dann auf dem Bild ausgerichtet werden muß, das kann immer etwas dauern und ist mit etwas Geduld verbunden, die erste Zahl (12) ist die Schriftgröße, die 3, Zahl Horizontale Ausrichtung, während die Zahl vor der Farbe die Höhe bestimmt.

// Die Textausgaben
imagettftext($img, 12, 0, 200, 15, $black, "fonts/kr1.ttf", "Androtux sagt ");
imagettftext($img, 12, 0, 300, 15, $white,"fonts/kr1.ttf", "". $begruessung);
imagettftext($img, 12, 0, 200, 35, $black, "fonts/kr1.ttf", "Am:");
imagettftext($img, 12, 0, 220, 35, $white,"fonts/kr1.ttf", "". $datum ." um " . $uhrzeit . " Uhr" );
imagettftext($img, 12, 0, 200, 55, $black, "fonts/kr1.ttf", "Du Nutzt: ");
imagettftext($img, 12, 0, 265, 55, $white, "fonts/kr1.ttf", "". $browser);
imagettftext($img, 12, 0, 200, 75, $black, "fonts/kr1.ttf", "auf: ");
imagettftext($img, 12, 0, 265, 75, $white, "fonts/kr1.ttf", "". $os);
imagettftext($img, 12, 0, 200, 95, $black, "fonts/kr1.ttf", "deine IP: ");
imagettftext($img, 12, 0, 265, 95, $white, "fonts/kr1.ttf", "". $ip);
//imagettftext($img, 12, 0, 200, 135, $black, "fonts/kr1.ttf", "dein Host ist: ");
//imagettftext($img, 12, 0, 265, 155, $white, "fonts/kr1.ttf", "". $host);
imagettftext($img, 12, 0, 170, 115, $black, "fonts/kr1.ttf", "DOM's letzter Artikel: " );
imagettftext($img, 14, 0, 20, 135, $red, "fonts/kr1.ttf", "". $news_data->title);
imagettftext($img, 10, 0, 10, 250, $blau, "fonts/kr1.ttf", "". $version . $views);
//Sig Copyright
$version= "Sig.0.5 © 2007 - 2015 by dom | http://www.dom-blogs.net | ";
//header("Content-type: image/png");
ImagePNG($img);

Sollte es zu Problemen kommen, kann man hier Unten den header(„Content-type: aktivieren, dann muß er aber am Anfang des Scriptes augeschaltet werden, dann kann man Fehler sehen die sonst nicht auftauchen würden, nach dem Bugfixen sollte es wieder geändert werden.

PHP in .png umschreiben per .htaccess

Nun haben wir natürlich noch das Problem das man in Foren keine .php Dateien in die Signatur Einbinden kann. Das ist nicht weiter tragisch, hierzu bedienen wir uns einem kleinen Trick, denn man kann per .htaccess und der rewrite Engine einfach aus der .php Endung eine .png Endung machen. Und da wir ja vorher schon mit PHP ein PNG erzeugt haben haben, können wir anstatt sig.php auch einfach sig.png eingeben.
Der Inhalt der .htaccess:
RewriteEngine On
RewriteRule sig.png sig.php

So das war es soweit auch schon, Natürlich ist es alles noch erweiterbar, und gerade was für Browser und die Betriebsysteme sollte mal aktualisiert werden, da fehlen zum Beispiel noch Android und IOS usw. das könnt Ihr nach Belieben erweitern wenn Ihr möchtet. Achso das ganze ist eine Date, die Fonts liegen im im Ordner fonts/ Ich werde die komplette .zip Anhängen damit man sehen kann wie die Struktur ist, oder Ihr könnt auch dann einfach die Dateien nehmen um damit rum zu spielen. Allerdings müsstet Ihr dann noch die im Paket befindliche htaccess in .htaccess umbenennen.
Download Dynamische Signatur in PHP

LG Dom

Dom

About Dom

Hier bloggt der Dom, mein voller Name ist Dominik Schalling und ich bin Zeitlebens Marburger, auch wenn ich zwischenzeitlich mal ein Jahr in Jena war. Ich bin 40 Jahre, Papa und Blogger aus Spaß an der Freude und hoffe das Euch der Blog etwas gefällt. Eigentlich schreibe ich drüben bei www.dom-blogs.net aber ich hatte inzwischen mehr Lust auf MiniPCś egal ob mit Android oder irgend einem Linux angetreiben. Wenn Dir ein Artikel gefällt, oder er dir geholfen hat, würde ich mich über eine Kaffespende freuen.

11 thoughts on “Tutorial – Dynamische Signatur mit PHP”

  1. Ich habe schon vor längerer Zeit mitbekommen, dass man mit PHP auch Bilder erzeugen kann. Mir war es dann aber zu aufwändig, mich hinein zu arbeiten. Mit so einem praktischen Beispiel wie in diesem Blog fällt mir das viel leichter.
    Danke, das war sehr hilfreich.

  2. Hallo Dominik, nach solch einer Anleitung habe ich schon länger gesucht und muss zugeben Deine hier ist die einzige, die ich als Anfängerin wirklich verstehen konnte. Einen Dank fürs zur Verfügung stellen…..

  3. Super Anleitung. Jetzt kann ich in Foren „professioneller“ Werbung für meine Seite machen. So mit Text und Link in der Signatur war bis jetzt mein Vorgehen. Aber mit einem Bild wirkt das gleich viel interessanter und weckt auch mehr Aufmerksamkeit. Bin gespannt, ob sich das bei den Besucherzahlen zeigt.

  4. Hallo,

    zwei Fragen werfe ich hier rein. Ich habe aufgrund eines Plattencrash all meine alten sig-scripte verloren.

    1.
    Das php kann bei manchen Schriftarten die umlaute nicht, obwohl die Schriftart dies unterstützt.
    Kann man das ändern, code oder ähnliches?

    2.
    ich habe hier ein code gefunden, denn ich gern einbauen würde;

    // Condown Weihnachten
    //function DaysUntilX($day,$month,$year){
    // $color = $c3;
    // $dayX = mktime(0,0,0,$month,$day,$year);
    // $now = time();
    // $diff = $dayX – $now;
    // $days= ceil($diff/(60*60*24));
    // return $days;
    ImageString ($bild, 10, 22, 5, ‚Noch ‚.DaysUntilX(24,12,2015).‘ Tage bis zum Weltuntergang…ähm Weihnachten‘, $c1);

    in einer eigenen php funtzt das Script, bei ich den in Eurem hier ein, hat sich gleich erledigt. Eine Idee?

    1. Zu 1:

      Das sollte mit UTF8 oder Iso zu bheben sein je nachdem wie du es haben möchtest, dementsprechend muss das Dokument also die sig.php auch gespeichert sein.

      Hm ob es genau so laufen würde wage ich anhand eines kleinen Syntaxes mal zu bezweifeln … hab es allerdings auch nicht getestet 😉 schau dir mal die bitte genau deinen Errorlog an.
      LG Dom 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Kommentarlinks könnten nofollow frei sein.