How I programmed my dynamic Forum Signature Image with PHP:
(See the Signature Image at the bottom of this post)
Part [1] Prepare the texts:
Job [1.1] Find the TCP/IP address of the surfer:
CODE
$SurferAddress = $_SERVER['REMOTE_ADDR'];
Job [1.2] Find the name of the Internet Provider of the surfer:
Job [1.2] Step [1.2.1] Find the name of the machine of the surfer:
CODE
$SurferHostName = gethostbyaddr($_SERVER['REMOTE_ADDR']);
Job [1.2] Step [1.2.2] Fetch the two last qualifiers (three if United Kingdom)
CODE
$x1 = strrpos($SurferHostName,'.'); // Find the LAST . in the host-name:
$Last = substr($SurferHostName,1+$x1); // Take the LAST word:
$Rest = substr($SurferHostName,0,$x1); // Take previous part:
$x2 = strrpos($Rest,'.'); // Find the NEXT-TO-LAST . in the host-name:
$NextToLast = substr($Rest,1+$x2); // Take the NEXT-TO-LAST word:
$Rest = substr($Rest,0,$x2); // Take previous part:
$x3 = strrpos($Rest,'.'); // Take the NEXT-TO-NEXT-TO-LAST . in the host-name:
$NextToNextToLast = substr($Rest,1+$x3); // Take the NEXT-TO-NEXT-TO-LAST word:
$Rest = substr($Rest,0,$x3); // Take previous part:
if ($Last == 'uk')
{
$SurferProvider = "$NextToNextToLast.$NextToLast.$Last";
}
else
{
$SurferProvider = "$NextToLast.$Last";
}
Job [1.3] Find the name of the browser:
CODE
$BrowserInfo = $_SERVER['HTTP_USER_AGENT'];
if (ereg("MSIE", $BrowserInfo))
{
$SurferBrowser = "Internet Explorer";
}
elseif (ereg("Firefox", $BrowserInfo))
{
$SurferBrowser = "Firefox";
}
elseif (ereg("Lynx", $BrowserInfo))
{
$SurferBrowser = "Lynx";
}
elseif (ereg("Opera", $BrowserInfo))
{
$SurferBrowser = "Opera";
}
elseif (ereg("WebTV", $BrowserInfo))
{
$SurferBrowser = "WebTV";
}
elseif (ereg("Konqueror", $BrowserInfo))
{
$SurferBrowser = "Konqueror";
}
elseif (ereg("Epiphany", $BrowserInfo))
{
$SurferBrowser = "Epiphany";
}
elseif (ereg("Gecko", $BrowserInfo))
{
$SurferBrowser = "Mozilla";
}
elseif ( (eregi("bot", $BrowserInfo)) || (ereg("Google", $BrowserInfo)) || (ereg("Slurp", $BrowserInfo)) || (ereg("Scooter", $BrowserInfo)) || (eregi("Spider", $BrowserInfo)) || (eregi("Infoseek", $BrowserInfo)) )
{
$SurferBrowser = "Bot";
}
elseif ( (ereg("Nav", $BrowserInfo)) || (ereg("Gold", $BrowserInfo)) || (ereg("Mozilla", $BrowserInfo)) || (ereg("Netscape", $BrowserInfo)) )
{
$SurferBrowser = "Netscape";
}
else
{
$SurferBrowser = "a browser";
}
Job [1.4] Find the name of the operating systeem:
CODE
if (ereg("Win98", $BrowserInfo))
{
$SurferOs = "Windows 98";
}
elseif (ereg("Windows 98", $BrowserInfo))
{
$SurferOs = "Windows 98";
}
elseif (ereg("Windows NT 5.1", $BrowserInfo))
{
$SurferOs = "Windows XP";
}
elseif (ereg("Windows NT 5.0", $BrowserInfo))
{
$SurferOs = "Windows 2000";
}
elseif (ereg("Windows NT", $BrowserInfo))
{
$SurferOs = "Windows NT";
}
elseif (ereg("Win", $BrowserInfo))
{
$SurferOs = "Windows";
}
elseif ( (ereg("Mac", $BrowserInfo)) || (ereg("PPC", $BrowserInfo)) )
{
$SurferOs = "Macintosh";
}
elseif (ereg("Linux", $BrowserInfo))
{
$SurferOs = "Linux";
}
elseif (ereg("FreeBSD", $BrowserInfo))
{
$SurferOs = "FreeBSD";
}
elseif (ereg("SunOS", $BrowserInfo))
{
$SurferOs = "SunOS";
}
elseif (ereg("IRIX", $BrowserInfo))
{
$SurferOs = "IRIX";
}
elseif (ereg("BeOS", $BrowserInfo))
{
$SurferOs = "BeOS";
}
elseif (ereg("OS/2", $BrowserInfo))
{
$SurferOs = "OS/2";
}
elseif (ereg("AIX", $BrowserInfo))
{
$SurferOs = "AIX";
}
else
{
$SurferOs = "a cool machine";
}
Job [1.5] Find a cool message; always different:
TODO: in MySQL
CODE
$Text_Element[1] = "NO Software Patents !";
$Text_Element[2] = "More games !";
$Text_Element[3] = "Perl rulez !";
$Text_Element[4] = "Rexx rulez !";
$Text_Element[5] = "ADA rulez !";
$Text_Element[6] = "Python rulez !";
$Text_Element[7] = "C++ rulez !";
$Text_Element[8] = "Basic rulez !";
$Text_Element[9] = "Java rulez !";
$Text_Element[10] = "JavaScript rulez !";
$Text_Element[11] = "ALGOL rulez !";
$Text_Element[12] = "COBOL rulez !";
$Text_Element[13] = "Delphi rulez !";
$Text_Element[14] = "Pascal rulez !";
$Text_Element[15] = "FORTRAN rulez !";
$Text_Element[16] = "Ruby rulez !";
$Text_Element[17] = "Eiffel rulez !";
$Text_Element[18] = "PHP rulez !";
$Text_Element[19] = "mySQL rulez !";
$Text_Element[20] = "SmallTalk rulez !";
$This_Second = date('s'); // "00" --- "59"
$Text_Index = 1 + (int)($This_Second/3);
$Random_Text = $Text_Element[$Text_Index];
Part [2] Create the Signature Image:
Job [2.1] Take a copy of the Template PNG Image that will serve as the background:
Job [2.1] Step [2.1.1] Determine the sizes:
CODE
$New_Width = 308;
$New_Height = 123;
Job [2.1] Step [2.1.2] Identify the Template PNG Image:
CODE
$Source_Image_Name = "template.png";
Job [2.1] Step [2.1.3] Create a copy the Template PNG Image in a memory structure:
CODE
$New_Image = ImageCreateFromPNG($Source_Image_Name) or die("Problem In Opening The Source Template Image");
Job [2.2] Write the 3 lines of text, and the 2 lines of signature, inside the new PNG image:
Job [2.2] Step [2.2.1] Determine the geometry --- in order to position correctly:
CODE
$Label_Width = 304;
$Label_Height = 55;
$Label_1_X_Offset = 2;
$Label_1_Y_Offset = 10;
$Label_2_X_Offset = 2;
$Label_2_Y_Offset = 26;
$Label_3_X_Offset = 2;
$Label_3_Y_Offset = 42;
$Sign_1_X_Offset = 2;
$Sign_1_Y_Offset = 82;
$Sign_2_X_Offset = 2;
$Sign_2_Y_Offset = 98;
Job [2.2] Step [2.2.2] Determine the colors to be used:
CODE
$Default_Color = ImageColorAllocate($New_Image, 0xFE, 0xFE, 0xFE);
$Label_Color = ImageColorAllocate($New_Image, 0, 0, 0); // must already be in the palette !
$Sign_Color = ImageColorAllocate($New_Image, 151, 75, 51); // must already be in the palette !
Job [2.2] Step [2.2.3] Determine the texts for the 3 text lines, and the 2 lines of signature:
CODE
$Label_Text_1 = "You are $SurferAddress at $SurferProvider";
$Label_Text_2 = "You use $SurferBrowser on $SurferOs";
$Label_Text_3 = $Random_Text;
$Label_Font = 2; // 1 = mono (too small) --- 2 = mono-in-thin --- 3 = 2-in-bold (too large)
$Sign_Text_1 = "Greetings,";
$Sign_Text_2 = "John";
$Sign_Font = 3; // 3 = mono-in-bold --- 4 = large-mono-in-thin (too large) --- 5 = 4-in-bold (too large)
Job [2.2] Step [2.2.4] Determine the sizes of the text lines, depending on font and content:
CODE
$Label_Text_1_Width = ImageFontWidth($Label_Font) * strlen($Label_Text_1);
$Label_Text_2_Width = ImageFontWidth($Label_Font) * strlen($Label_Text_2);
$Label_Text_3_Width = ImageFontWidth($Label_Font) * strlen($Label_Text_3);
Job [2.2] Step [2.2.5] Determine the place of the text lines: 3 centered, and 2 left aligned:
CODE
$Label_Text_1_X = $Label_1_X_Offset + ( ($Label_Width - $Label_Text_1_Width) / 2 );
$Label_Text_1_Y = $Label_1_Y_Offset;
$Label_Text_2_X = $Label_2_X_Offset + ( ($Label_Width - $Label_Text_2_Width) / 2 );
$Label_Text_2_Y = $Label_2_Y_Offset;
$Label_Text_3_X = $Label_3_X_Offset + ( ($Label_Width - $Label_Text_3_Width) / 2 );
$Label_Text_3_Y = $Label_3_Y_Offset;
$Sign_Text_1_X = $Sign_1_X_Offset;
$Sign_Text_1_Y = $Sign_1_Y_Offset;
$Sign_Text_2_X = $Sign_2_X_Offset;
$Sign_Text_2_Y = $Sign_2_Y_Offset;
Job [2.2] Step [2.2.6] Draw the text lines:
CODE
ImageString($New_Image, $Label_Font, $Label_Text_1_X, $Label_Text_1_Y, $Label_Text_1, $Label_Color);
ImageString($New_Image, $Label_Font, $Label_Text_2_X, $Label_Text_2_Y, $Label_Text_2, $Label_Color);
ImageString($New_Image, $Label_Font, $Label_Text_3_X, $Label_Text_3_Y, $Label_Text_3, $Label_Color);
ImageString($New_Image, $Sign_Font, $Sign_Text_1_X, $Sign_Text_1_Y, $Sign_Text_1, $Sign_Color);
ImageString($New_Image, $Sign_Font, $Sign_Text_2_X, $Sign_Text_2_Y, $Sign_Text_2, $Sign_Color);
Job [2.3] Write the new PNG image via http to the browser of the surfer:
CODE
header("Content-type: image/png");
ImagePNG($New_Image);
I hope that the comments explain what is going on
to produce the following result: (refresh to see the changes...)
Reply