23 juli, 2006

PHP: Skriv text till bild med GD2

Förord
Hmm, klockan är 03:43 och jag är för pigg för att lägga mig. Kan inte förstå varför jag känner så, men jag blir nog tröttare efter att ha skrivit en liten artikel :).
Den här artikeln kommer handla om hur man skriver text till bilder i PHP. Ni kanske har sett bilder på forum som visar information om er dator; typ vilken IP-adress eller vilken Internet Leverantör (ISP) ni har. Nu kommer ni får lära er hur man visar en besökares IP-adress.


Introduktion
För att kunna hänga med i artikeln och förstå någorlunda vad jag talar om, behöver ni kunna lite PHP. Grundläggande kunskaper räcker, men ni ska helst ha vana för programmering.

Det som gör att vi kan skapa dynamiska bilder i PHP är ett bibliotek vid namn GD2 (php_gd2.dll). De som har läst min artikel om hur man "Sätter upp en egen server" har redan GD2 konfigurerat och klart. Ni andra får ta reda på om ni har det på ert webbhotel eller om ni har det på er server innan ni börjar.

Vill ni läsa lite mer om bibiloteket GD2 eller ladda ner det till er server, rekommenderar jag att ni besöker www.boutell.com/gd.

Jag tänker inte gå igenom i detalj hur ni skapar PHP-dokument för det borde ni kunna fixa på egen hand.


Då börjar vi
Börja med att leta fram den bild du vill använda. Ni kan använda den bifogade bilden om ni vill för det är den jag har använt.



Öppna sedan ett nytt PHP-dokument och skriv följande kod:

<?php
// Hämta bilden som ska visas
// Observera att bildtypen måste vara av typen PNG (mime: image/png)
$img = imagecreatefrompng('C:/bilder/sunset_small.PNG');


Nu har vi öppnat bilden och lagrat en referens till den i en variabel $img. I nästa kodsnutt definierar vi de färger vi vill kunna använda till texten:

// Definiera färger
// Vi använder RGB-värden från 0-255 (röd, grön, blå)
$black = imagecolorallocate($img, 0, 0, 0);
$white = imagecolorallocate($img, 255, 255, 255);
$blue = imagecolorallocate($img, 0, 0, 200);
$red = imagecolorallocate($img, 200, 0, 0);


Sedan sätter vi storleken på texten till den inbyggda storleken 3. Det finns följande storlekar för de som vill testa sig fram: 1 (minst), 2, 3, 4 och 5 (störst).

// Sätt en inbyggd teckenstorlek för imagestring()
$font = 3;


Nu anger vi x- och y koordinaterna på bilden där vi vill att textens övre vänstra hörn ska börja. Om ni använder en annan bild än den bifogade så måste ni naturligtvis ändra på koordinaterna. Kom bara ihåg att koordinaten (0, 0) i GD2 biblioteket (och på flera andra ställen) börjar längst upp till vänster på alla bilder:

// Ange koordinater där texten ska börja
$x = 125;
$y = 160;


Nu väljer vi den text som vi vill skriva till bilden. Det är en ledtext och besökarens IP-adress som slås ihop till en ända sträng:

// Skriv den text ni vill ska användas
$text = 'Du har IP: ';
$ip = $_SERVER['REMOTE_ADDR']; // Lagra IP-adress
$text .= $ip;


Nu ligger hela texten lagrad i variabeln $text så nu kan vi skriva den till bilden med referensen $img. Ni kan byta ut variabeln $white (vit) mot någon annan av de färger vi definierade i början av koden:

// Skriv texten till bilden
imagestring($img, $font, $x, $y, $text, $white);


Vi använder funktionen imagestring för att använda referensen $img, med textstorleken $font, koordinaten $x och $y (125, 160), texten $text och färgen $white.

Nu måste vi bara tala om för webbläsaren att det kommer en PNG bild istället för en vanlig hemsida:

// Berätta för webbläsaren att det nu kommer en bild av typen png.
header('Content-type: image/png');

// Skicka bilden till webbläsaren
imagepng($img);


Slutligen så frigör vi minnet för att göra servern och systemadministratören glad:

// Frigör minne (viktigt!)
imagedestroy($img);
?>


Om ni använder ett annat format än PNG kan ni testa byta ut png i koden till ert format. GIF kan dock krångla pga licenser.


Testa
Spara nu PHP-dokumentet som "dynamisk_bild.php" och kör den på den server ni använder.


Slutord
Hoppas ni fick det att fungera och att ni har lärt er något nytt ;)
Nu är jag väldigt trött och ska gå och lägga mig!

Zzz Zzz


Källor
www.boutell.com/gd
www.php.net/gd

Inga kommentarer:

Välkomna till bloggen

Välkomna ska ni vara kära besökare. Jag skriver om IT för att det är kul och för att jag vill dela med mig av information och kunskap. Jag försöker hålla bloggen så kategoriserad som möjligt för att ni enklare ska hitta intressanta länkar och artiklar.