login  Naam:   Wachtwoord: 
Registreer je!
 Tutorials

Tutorials > PHP


Gegevens:
Geschreven door:
Sam
Moeilijkheidsgraad:
Moeilijk
Hits:
4637
Punten:
Aantal punten:
 (4.67)
Aantal stemmen:
3
Stem:
Niet ingelogd
Nota's:
 Lees de nota's (10)
 

Tutorial:

[GD] Identicon

1. Inleiding
2. Hoe werkt het?
3. Image class
4. Shape class
5. IdentIcon class
6. Een IdentIcon maken

1. Inleiding

Een identicon is een visuele weergave van een hash, meestal van een IP adres, die het mogelijk maakt om een gebruiker snel en gemakelijk te kunnen identificeren. Identicons zijn voor een mens veel sneller te herkennen dan een IP adres, waardoor je snel kan zien wie wie is op een bepaalde website. Het is ook bijna onmogelijk om een identicon terug om te zetten naar de hash die gebruikt werd om het icon te genereren, omdat de gebruikers doorgaans niet weten welke vormen welke delen van een hash voorstellen.

pijl top
2. Hoe werkt het?

Een identicon wordt volledig gebaseerd op een hash. Omdat er geen algemene standaard is voor het maken van een identicon, kunnen ze er voor eenzelfde persoon op verschillende websites dus helemaal anders uitzien. In deze tutorial zullen we de eerste 10 tekens van de hash als volgt gebruiken om een identicon samen te stellen:

# Functie
0 - 5 Hexadecimale voorstelling van de kleur van het icon.
6 ID van een voorgedefinieerde vorm voor het midden van het icon.
7 - 8 ID van een voorgedefinieerde vorm voor de zijkanten van het icon.
9 ID van een voorgedefinieerde vorm voor de hoeken van het icon.


pijl top
3. Image class

We zullen een Image class gebruiken die later uitgebreid zal worden. De reden hiervoor is dat je de Image class later nog eventueel kan uitbreiden zodat je ze voor andere doeleinden kan gebruiken.
Onze Image class heeft voorlopig niets anders nodig dan de breedte, hoogte en image resource van onze afbeelding:

<?php

class Image
{
    private 
$width;
    private 
$height;
    private 
$resource;
}

?>


Omdat we de breedte en de hoogte bij het aanmaken van de afbeelding al weten, schrijven we een gepaste constructor die een image resource aanmaakt met de gegeven breedte en hoogte. In de constructor vullen we de achtergrond van de afbeelding ook meteen met een witte kleur.
We voorzien ook een getter voor de image resource, omdat we deze later nog gaan nodig hebben:

<?php

class Image
{
    private 
$width;
    private 
$height;
    private 
$resource;
    
    public function 
Image($width$height)
    {
        
$this -> resource imagecreatetruecolor($width$height);
        
imageantialias($this -> resourcetrue);
        
$this -> width $width;
        
$this -> height $height;
        
imagefill($this -> resource00imagecolorallocate($this -> resource255255255));
    }
    
    public function 
getResourceImage()
    {
        return 
$this -> resource;
    }
}

?>
In de constructor wordt een nieuwe image resource gemaakt met imagecreatetruecolor(breedte, hoogte); Deze wordt daarna opgevuld met wit door imagefill(resource, x, y, kleur);


Tot slot breiden we deze class nog uit met een paar methods die een kleur kunnen allocaten, de afbeelding kunnen resizen en de afbeelding kunnen opslaan:

<?php

class Image
{
    private 
$width;
    private 
$height;
    private 
$resource;
    
    public function 
Image($width$height)
    {
        
$this -> resource imagecreatetruecolor($width$height);
        
imageantialias($this -> resourcetrue);
        
$this -> width $width;
        
$this -> height $height;
        
imagefill($this -> resource00imagecolorallocate($this -> resource255255255));
    }
    
    public function 
getResourceImage()
    {
        return 
$this -> resource;
    }
    
    public function 
allocateColor($red$green$blue)
    {
        
$col imagecolorallocate($this -> resource$red$green$blue); 
        return 
$col;
    }
    
    public function 
resize($newWidth$newHeight)
    {
        
$tmp imagecreatetruecolor($newWidth$newHeight);
        
imagecopyresampled($tmp$this -> resource0000$newWidth$newHeight$this -> width$this -> height);
        
        
$this -> resource $tmp;
    }

    public function 
getImage()
    {
        
$tmpFileName "tmp.png";
        
imagepng($this -> resource$tmpFileName0);
        
        return 
$tmpFileName;
    }
}

?>

In de functie resize(breedte, hoogte); wordt de afbeelding geresized door eerst een nieuwe afbeelding met de gewenste breedte en hoogte aan te maken en daarna de oude afbeelding te kopieëren naar de nieuwe. We gebruiken hier imagecopyresampled(); omdat deze de afbeelding ook resampled na het resizen zodat je geen scherpe contouren krijgt.

De functie allocateColor(rood, groen, blauw); reserveert een kleur in de afbeelding zodat deze gebruikt kan worden. De functie geeft ook de decimale waarde van de kleur terug.

getImage(); slaat een de afbeelding op onder de naam "tmp.png" en returned deze naam.



pijl top
4. Shape class

Na onze Image klasse, zullen we ook een shape klasse nodig hebben. Deze klasse maakt het mogelijk om een vorm te definiëren zodat we deze later kunnen gebruiken bij het samenstellen van het identicon.
Om te beginnen bevat deze klasse een array van punten die samen de vorm maken. Omdat deze klasse buiten het definiëren van de vormen geen andere functies heeft, is het voldoende als we een constructor schrijven die de array toewijst en een getter die array returned:

<?php

class Shape
{
    private 
$pointlist = array();
    
    
    public function 
Shape($pointlist)
    {
        
$this -> pointlist $pointlist;
    }
    
    
    public function 
getPointlist()
    {
        return 
$this -> pointlist;
    }
}

?>


pijl top
5. IdentIcon class

Nu kunnen we eindelijk beginnen aan het schrijven van onze IdentIcon klasse. Een identicon is een afbeelding, dus onze klasse zal overerven van Image. De klasse IdentIcon maakt zowel gebruik van de klasse Image als van de klasse Shape, dus mogen we zeker niet vergeten om bijde klassen te includen:

<?php
require_once 'Image.php';
require_once 
'Shape.php';


class 
IdentIcon extends Image
{
    private 
$c = array();
    private 
$m = array();
    private 
$h = array();
    private 
$hash "";
    private 
$size;
    private 
$foreground;
}

?>
$c, $m en $h zijn arrays die onze shapes zullen bevatten. We hebben verschillende sets van shapes voor het midden ($c), de zijkanten ($m) en de hoeken ($h).
$hash is een string die de MD5 hash zal bevatten.
Omdat een identicon altijd een vierkant is, hebben we geen behoefte aan een apparte breedte en hoogte maar komen we toe met een grootte ($size).
$foreground is een integer die de decimale waarde van de kleur van de vormen zal bevatten.


In de constructor van de IdentIcon klasse maken we eerst een nieuwe Image door de parent constructor op te roepen en slaan we de grootte van het identicon op. We definiëren ook onze shapes die we later gaan gebruiken door telkens een nieuw Shape opbject te maken met de punten van onze shape in een array. Als we bijvoorbeeld een vierkant willen maken, schrijven we $shape = new Shape(array(0,0, 1,0, 1,1, 0,1));

<?php
require_once 'Image.php';
require_once 
'Shape.php';


class 
IdentIcon extends Image
{
    private 
$c = array();
    private 
$m = array();
    private 
$h = array();
    private 
$hash "";
    private 
$size;
    private 
$foreground;
    
    
    public function 
IdentIcon($size$hash)
    {
        
parent::Image($size*3$size*3);
        
$this -> size $size;
        
$this -> hash $hash;
        
        
$this -> c[0] = new Shape(array(0,01,01,10,1));
        
$this -> c[1] = new Shape(array(0,00,00,0));
        
$this -> c[2] = new Shape(array(0.5,01,0.50.5,10,0.5));
        
$this -> c[3] = new Shape(array(0,01,01,10,10,0.50.5,01,0.50.5,10,0.5));
        
$this -> c[4] = new Shape(array(0.33,00.66,00.5,0.51,0.331,0.660.5,0.50.66,1,
                                        
0.33,10.5,0.50,0.660,0.330.5,0.50.33,0));
        
$this -> c[5] = new Shape(array(0,00.5,0.251,00.75,0.51,10.5,0.750,10.25,0.50,0));
        
$this -> c[6] = new Shape(array(0.25,0.250.75,0.250.75,0.750.25,0.750.25,0.25));
        
$this -> c[7] = new Shape(array(0,00.5,00.5,0.51,0.51,10.5,10.5,0.50,0.50,0));
        
$this -> c[8] = new Shape(array(0,01,01,10,10,0.50.5,01,0.50.5,10,0.50.25,0.5,
                                        
0.5,0.250.75,0.50.5,0.750.25,0.50,0.50,0));
        
$this -> c[9] = new Shape(array(0,00.33,00.33,0.330.66,0.330.66,01,01,0.330.66,0.33,
                                        
0.66,0.661,0.661,10.66,10.66,0.660.33,0.660.33,10,1,
                                        
0,0.660.33,0.660.33,0.330,0.330,0));
        
        
$this -> m[0] = new Shape(array(0.5,01,10,1));
        
$this -> m[1] = new Shape(array(0,00.5,01,01,10.5,00,1));
        
$this -> m[2] = new Shape(array(0,00.5,00.25,0.50.75,0.50.5,01,01,10.750.50.5,1,
                                        
0.25,0.50,1));
        
$this -> m[3] = new Shape(array(0.5,01,10,10.25,0.50.75,0.50.5,10.25,0.50.5,0));
        
$this -> m[4] = new Shape(array(0.5,00.75,00.5,0.51,0.51,0.750.5,0.50.5,10.25,10.5,0.5,
                                        
0,0.50,0.250.5,0.5));
        
$this -> m[5] = new Shape(array(0,01,01,10.5,11,00.5,00,1));
        
$this -> m[6] = new Shape(array(0.5,01,00.5,10,1));
        
$this -> m[7] = new Shape(array(0,0.50,01,01,10.5,11,0.51,00.5,0));
        
$this -> m[8] = new Shape(array(0.5,01,01,0.50.5,10,10,0.5));
        
$this -> m[9] = new Shape(array(0.5,01,01,10.5,11,0.5));
        
$this -> m[10] = new Shape(array(0,00.5,01,0.50.5,10,1));
        
$this -> m[11] = new Shape(array(0,00.5,00.5,0.50,0.5));
        
$this -> m[12] = new Shape(array(0.5,01,01,10,10,0.50.5,0.5));
        
$this -> m[13] = new Shape(array(0,01,01,10,10,0.50.5,01,0.50.5,10.5,0.50,0.5));
        
$this -> m[14] = new Shape(array(0.5,01,0.50.5,10.5,0.50,0.5));
        
$this -> m[15] = new Shape(array(0.5,01,10.5,1));
        
$this -> m[16] = new Shape(array(0,01,01,10.5,00.5,10,1));
        
$this -> m[17] = new Shape(array(0,00.5,10.5,01,10,1));
        
$this -> m[18] = new Shape(array(0,01,01,10,1));
        
$this -> m[19] = new Shape(array(1,01,10.5,11,0.50.5,0.5));
        
$this -> m[20] = new Shape(array(0,01,00.5,0.51,0.50.5,10,1));
        
$this -> m[21] = new Shape(array(0,01,01,0.50,00.5,10,1));
        
$this -> m[22] = new Shape(array(0,01,0.51,10.5,10,0));
        
$this -> m[23] = new Shape(array(0,01,01,10.5,11,0.50.5,00,00.5,0.50,1));
        
$this -> m[24] = new Shape(array(0.5,00.5,0.51,0.51,10.5,10.5,0.50,0.5));
        
$this -> m[25] = new Shape(array(0.5,00.5,0.51,0.50.5,10.5,0.50,0.5));
        
$this -> m[26] = new Shape(array(0,01,01,10,10,0.50.5,10.5,0.51,0.50.5,00.5,0.50,0.5));
        
        
$this -> h[0] = new Shape(array(0,00.5,00.5,0.50,0.5));
        
$this -> h[1] = new Shape(array(0,00.5,00,0.5));
        
$this -> h[2] = new Shape(array(0,01,00,1));
        
$this -> h[3] = new Shape(array(0,00.5,0.50,1));
        
$this -> h[4] = new Shape(array(0,01,0.50,1));
        
$this -> h[5] = new Shape(array(0,00.5,00,0.50.5,10,1));
        
$this -> h[6] = new Shape(array(0,01,00.5,0.50,0.5));
        
$this -> h[7] = new Shape(array(0,00.5,00.5,10,1));
        
$this -> h[8] = new Shape(array(0.5,01,01,0.50.5,10,10,0.5));
    }
}

?>
Je hebt misschien gemerkt dat de Image die we maken, 3 keer zo groot is als het identicon dat we willen hebben. Dit doen we omdat de imageantialias(); functie niet altijd een denderend resultaat geeft. Als we onze afbeelding te groot maken en daarna resamplen, krijgen we in dit geval hetzelfde effect als imageantialias();
Verder stellen we de grootte van het identicon in op de meegegeven grootte, geven we de hash een waarde en definiëren we een aantal shapes die gebruikt worden om het icon samen te stellen.

De vormen die we hier gedefiniëerd hebben, zien er zo uit (in volgorde):

Centraal deel:
Midden

Randen:

Zijkanten

Hoeken:
Hoeken


We willen de shapes die we net gedefiniëerd hebben, kunnen toevoegen aan onze afbeelding. Daarom maken we een method addShape(Array met coördinaten, rotatie, positie); die de gegeven shape met de gegeven rotatie op de gegeven positie van de afbeelding zet. Ons identicon is een vierkant opgesteld uit 9 shapes, dus de posities zijn als volgt:

[0][1][2]
[3][4][5]
[6][7][8]

De positie die gegeven wordt, moeten we omzetten in een coördinaat op onze afbeelding. Elk van de shapes is $size breed en hoog, dus kunnen we de x- en y-coördinaat op deze manier berekenen:

$x = ($position % 3) * $this -> size;
$y = floor($position / 3) * $this -> size;

We krijgen de volgende code voor onze addShape method:

    public function addShape($shape$rotation$position)
    {
        if(
get_class($shape) == 'Shape')
        {
            
$tmp imagecreatetruecolor($this -> size$this -> size);
            
$white imagecolorallocate($tmp255255255);
            
imagefill($tmp00$white);
            
$pointlist $shape -> getPointlist();
            
$refactored = array();
            foreach(
$pointlist as $point)
            {
                
$refactored[] = $point $this -> size;
            }
            
imagefilledpolygon($tmp$refactoredcount($refactored) / 2$this -> foreground);
            
$tmp imagerotate($tmp$rotation$white);
            
            
$x = ($position 3) * $this -> size;
            
$y floor($position 3) * $this -> size;
            
            
imagecopymerge(parent::getResourceImage(), $tmp$x$y00$this -> size$this -> size100);
        }
    }
De gebruikelijke GD functies moeten niet meer uitgelegd worden dus gaan we meteen bekijken wat er hier precies gebeurd.
Om te beginnen wordt er een tijdelijke afbeelding gemaakt, die we zullen gebruiken om onze shape in te tekenen en deze te roteren, daarna wordt er een witte kleur geallocate op de tijdelijke afbeelding om de achtergrond mee te vullen.
Zoals je misschien gemerkt hebt bij het definiëren van de shapes, lagen al onze coördinaatgetallen tussen 0 en 1. Daarom moeten we deze coördinaten nu aanpassen zodat ze op dezelfde schaal als de grootte van de afbeelding zitten. De nieuwe coördinaatgetallen zullen dus van 0 naar $size gaan. We doen dit door de array te doorlopen en de aangepaste getallen in een nieuwe array te stoppen.
De functie imagefilledpolygon(image resource, lijst met punten, aantal punten, kleur); plaatst gewoon een polygon, een 2 dimensionale figuur opgebouwd uit coördinaten, op de tijdelijke afbeelding. Deze afbeeldging wordt daarna geroteerd en door middel van de uitgerekende x en y coördinaat op het identicon gezet.


Ten slotte moeten we de getImage(); method nog overschrijven zodat ze bruikbaar wordt voor ons identicon. In deze method moet het icon samengesteld worden en moet er een afbeeldingslocatie gereturned worden zodat we de afbeelding kunnen weergeven.
We hebben in het begin al afgesproken welke tekens van de hash we waarvoor gaan gebruiken. De eerste 6 tekens van de hexadecimale hash, gebruiken we om de kleur van icon te bepalen. Omdat we in GD decimale waarden moeten gebruiken om kleuren te allocaten, moeten we dus de tekens van de hash dus per 2 omzetten naar decimale waarden dmv hexdec();
Als we de kleur hebben opgeslagen en geallocate moeten we enkel nog de shapes op de afbeelding zetten, de afbeelding resamplen en de afbeelding opslaan:

    public function getImage()
    {
        if(
$this -> hash != "")
        {
            
$red hexdec(substr($this -> hash02));
            
$green hexdec(substr($this -> hash22));
            
$blue hexdec(substr($this -> hash42));
            
$this -> foreground parent::allocateColor($red$green$blue);
            
$centerImageId hexdec(substr($this -> hash61)) % count($this -> c);
            
$sideImageId hexdec(substr($this -> hash72)) % count($this -> m);
            
$cornerImageId hexdec(substr($this -> hash91)) % count($this -> h);
        
            
self::addShape($this -> c[$centerImageId], 04);
        
            
self::addShape($this -> m[$sideImageId], 01);
            
self::addShape($this -> m[$sideImageId], 903);
            
self::addShape($this -> m[$sideImageId], 2705);
            
self::addShape($this -> m[$sideImageId], 1807);
        
            
self::addShape($this -> h[$cornerImageId], 00);
            
self::addShape($this -> h[$cornerImageId], 902);
            
self::addShape($this -> h[$cornerImageId], 2706);
            
self::addShape($this -> h[$cornerImageId], 1808);
            
parent::resize($this -> size$this -> size);
            return 
parent::getImage();
        }
    }
}


Onze uiteindelijke IdentIcon klasse ziet er nu zo uit:

<?php
require_once 'Image.php';
require_once 
'Shape.php';


class 
IdentIcon extends Image
{
    private 
$c = array();
    private 
$m = array();
    private 
$h = array();
    private 
$hash "";
    private 
$size;
    private 
$foreground;
    
    
    public function 
IdentIcon($size$hash)
    {
        
parent::Image($size*3$size*3);
        
$this -> size $size;
        
$this -> hash $hash;
        
        
$this -> c[0] = new Shape(array(0,01,01,10,1));
        
$this -> c[1] = new Shape(array(0,00,00,0));
        
$this -> c[2] = new Shape(array(0.5,01,0.50.5,10,0.5));
        
$this -> c[3] = new Shape(array(0,01,01,10,10,0.50.5,01,0.50.5,10,0.5));
        
$this -> c[4] = new Shape(array(0.33,00.66,00.5,0.51,0.331,0.660.5,0.50.66,1,
                                        
0.33,10.5,0.50,0.660,0.330.5,0.50.33,0));
        
$this -> c[5] = new Shape(array(0,00.5,0.251,00.75,0.51,10.5,0.750,10.25,0.50,0));
        
$this -> c[6] = new Shape(array(0.25,0.250.75,0.250.75,0.750.25,0.750.25,0.25));
        
$this -> c[7] = new Shape(array(0,00.5,00.5,0.51,0.51,10.5,10.5,0.50,0.50,0));
        
$this -> c[8] = new Shape(array(0,01,01,10,10,0.50.5,01,0.50.5,10,0.50.25,0.5,
                                        
0.5,0.250.75,0.50.5,0.750.25,0.50,0.50,0));
        
$this -> c[9] = new Shape(array(0,00.33,00.33,0.330.66,0.330.66,01,01,0.330.66,0.33,
                                        
0.66,0.661,0.661,10.66,10.66,0.660.33,0.660.33,10,1,
                                        
0,0.660.33,0.660.33,0.330,0.330,0));
        
        
$this -> m[0] = new Shape(array(0.5,01,10,1));
        
$this -> m[1] = new Shape(array(0,00.5,01,01,10.5,00,1));
        
$this -> m[2] = new Shape(array(0,00.5,00.25,0.50.75,0.50.5,01,01,10.750.50.5,1,
                                        
0.25,0.50,1));
        
$this -> m[3] = new Shape(array(0.5,01,10,10.25,0.50.75,0.50.5,10.25,0.50.5,0));
        
$this -> m[4] = new Shape(array(0.5,00.75,00.5,0.51,0.51,0.750.5,0.50.5,10.25,10.5,0.5,
                                        
0,0.50,0.250.5,0.5));
        
$this -> m[5] = new Shape(array(0,01,01,10.5,11,00.5,00,1));
        
$this -> m[6] = new Shape(array(0.5,01,00.5,10,1));
        
$this -> m[7] = new Shape(array(0,0.50,01,01,10.5,11,0.51,00.5,0));
        
$this -> m[8] = new Shape(array(0.5,01,01,0.50.5,10,10,0.5));
        
$this -> m[9] = new Shape(array(0.5,01,01,10.5,11,0.5));
        
$this -> m[10] = new Shape(array(0,00.5,01,0.50.5,10,1));
        
$this -> m[11] = new Shape(array(0,00.5,00.5,0.50,0.5));
        
$this -> m[12] = new Shape(array(0.5,01,01,10,10,0.50.5,0.5));
        
$this -> m[13] = new Shape(array(0,01,01,10,10,0.50.5,01,0.50.5,10.5,0.50,0.5));
        
$this -> m[14] = new Shape(array(0.5,01,0.50.5,10.5,0.50,0.5));
        
$this -> m[15] = new Shape(array(0.5,01,10.5,1));
        
$this -> m[16] = new Shape(array(0,01,01,10.5,00.5,10,1));
        
$this -> m[17] = new Shape(array(0,00.5,10.5,01,10,1));
        
$this -> m[18] = new Shape(array(0,01,01,10,1));
        
$this -> m[19] = new Shape(array(1,01,10.5,11,0.50.5,0.5));
        
$this -> m[20] = new Shape(array(0,01,00.5,0.51,0.50.5,10,1));
        
$this -> m[21] = new Shape(array(0,01,01,0.50,00.5,10,1));
        
$this -> m[22] = new Shape(array(0,01,0.51,10.5,10,0));
        
$this -> m[23] = new Shape(array(0,01,01,10.5,11,0.50.5,00,00.5,0.50,1));
        
$this -> m[24] = new Shape(array(0.5,00.5,0.51,0.51,10.5,10.5,0.50,0.5));
        
$this -> m[25] = new Shape(array(0.5,00.5,0.51,0.50.5,10.5,0.50,0.5));
        
$this -> m[26] = new Shape(array(0,01,01,10,10,0.50.5,10.5,0.51,0.50.5,00.5,0.50,0.5));
        
        
$this -> h[0] = new Shape(array(0,00.5,00.5,0.50,0.5));
        
$this -> h[1] = new Shape(array(0,00.5,00,0.5));
        
$this -> h[2] = new Shape(array(0,01,00,1));
        
$this -> h[3] = new Shape(array(0,00.5,0.50,1));
        
$this -> h[4] = new Shape(array(0,01,0.50,1));
        
$this -> h[5] = new Shape(array(0,00.5,00,0.50.5,10,1));
        
$this -> h[6] = new Shape(array(0,01,00.5,0.50,0.5));
        
$this -> h[7] = new Shape(array(0,00.5,00.5,10,1));
        
$this -> h[8] = new Shape(array(0.5,01,01,0.50.5,10,10,0.5));
    }
    
    
    public function 
addShape($shape$rotation$position)
    {
        if(
get_class($shape) == 'Shape')
        {
            
$tmp imagecreatetruecolor($this -> size$this -> size);
            
$white imagecolorallocate($tmp255255255);
            
imagefill($tmp00$white);
            
$pointlist $shape -> getPointlist();
            
$refactored = array();
            foreach(
$pointlist as $point)
            {
                
$refactored[] = $point $this -> size;
            }
            
imagefilledpolygon($tmp$refactoredcount($refactored) / 2$this -> foreground);
            
$tmp imagerotate($tmp$rotation$white);
            
            
$x = ($position 3) * $this -> size;
            
$y floor($position 3) * $this -> size;
            
            
imagecopymerge(parent::getResourceImage(), $tmp$x$y00$this -> size$this -> size100);
        }
    }
    
    
    public function 
getImage()
    {
        if(
$this -> hash != "")
        {
            
$red hexdec(substr($this -> hash02));
            
$green hexdec(substr($this -> hash22));
            
$blue hexdec(substr($this -> hash42));
            
$this -> foreground parent::allocateColor($red$green$blue);
            
$centerImageId hexdec(substr($this -> hash61)) % count($this -> c);
            
$sideImageId hexdec(substr($this -> hash72)) % count($this -> m);
            
$cornerImageId hexdec(substr($this -> hash91)) % count($this -> h);
        
            
self::addShape($this -> c[$centerImageId], 04);
        
            
self::addShape($this -> m[$sideImageId], 01);
            
self::addShape($this -> m[$sideImageId], 903);
            
self::addShape($this -> m[$sideImageId], 2705);
            
self::addShape($this -> m[$sideImageId], 1807);
        
            
self::addShape($this -> h[$cornerImageId], 00);
            
self::addShape($this -> h[$cornerImageId], 902);
            
self::addShape($this -> h[$cornerImageId], 2706);
            
self::addShape($this -> h[$cornerImageId], 1808);
            
parent::resize($this -> size$this -> size);
            return 
parent::getImage();
        }
    }
}

?>


pijl top
6. Een IdentIcon maken

Het enige wat we nu nog moeten doen, is een identicon maken:

<?php

require_once 'IdentIcon.php';

$hash md5('Sitemasters');
$icon = new IdentIcon(128$hash);

echo 
'<img src="' $icon -> getImage() . '" alt="Icon">;

?>


Voorbeeld:

Identicon

pijl top



« Vorige tutorial : [OOP] Een begin maken met OOP Volgende tutorial : Pagina navigatie in PHP en MySQL »

© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.015s