Visa epostadress som bild med PHP & GD

Undviker du att skriva ut din epostadress på din webbplats på grund av risken för spam? Jag tänkte här gå igenom om hur du kan visa din epostadress som en bild med hjälp av PHP och GD.

För att detta skript ska fungera måste du självklart ha PHP men även GD-biblioteket. Skapa en php_info() och kontrollera att du har GD installerat.

Steg 1
Första steget är att skapa filen ‘display_email.php‘. Det är denna filen som kommer sköta grovjobbet.

header("Content-type: image/png"); //Detta är en PNG-bild

if(isset($_GET['email']))
//Dekodar den base64-kodade adressen
$email = base64_decode($_GET['email']);
else
$email = "Skicka med en email";

$font = 4; //Sätter teckensnitt till 4

//Räknar bredden och höjd på bilden via
//emailens längd o teckensnittet
$imageWidth = (imagefontwidth($font) * strlen($email)) + 5;
$imageHeight = imagefontheight($font) + 5;

$im = @imagecreate($imageWidth, $imageHeight) or die("Kan inte skapa bilden");

//Allokerar färger, vit och svart
$background_color = imagecolorallocate($im, 255, 255, 255);
$text_color = imagecolorallocate($im, 0, 0, 0);

imagestring($im, $font, 2, 2, $email, $text_color); //Skapar texten

//Skapar png-bilden
imagepng($im, null, 9);

//Förstör bilden
imagedestroy($im);

Kommentarerna i koden är ganska självtalande men vi kan gå igenom lite kort vad som händer. Det första vi gör är att tala om att innehållet är en PNG-bild.

Nästa steg är att ta emot epost-adressen via $_GET[]. Det vi sedan gör är att dekoda den, vi kodar den när vi skriver ut den i html-kod.

Epostadresser är självklart olika långa och eftersom vi inte vill ha en bild på 500px så räknar vi ut bredden och höjden på bilden baserat på antal tecken och teckensnittets storlek.

Sedan skapar vi en bild med imagecreate och allokerar färger.

Sedan använder vi funktionen imagestring som skapar texten, denna funktion tar sex parametrar, en bildresurs, teckensnitt, x, y, texten och vilken färg som ska användas.

Sist så skapar vi png-bilden för att sedan förstöra bildresursen.

Nu har vi alltså en fil som klarar att ta emot en epostadress och göra om denna till en bild i rätt storlek.

Steg 2
Det sista vi behöver göra nu är att använda oss av vår ‘display_email’ fil.

" />

I och med att vi använder funktionen base64_encode så kommer resultatet se ut enligt följande, vilket gör det väldigt svårt för robotar att förstå att detta är en epostadress.
<img src="display_email.php?email=bWluX2Vwb3N0YWRyZXNzQG1hZGV1cC5vcmc=" />

Se Demo eller Ladda ner källkoden här.

2 Replies to “Visa epostadress som bild med PHP & GD”

Din kommentar eller åsikt