function generateIdenticon($iUserId, $iUserImageDefaultSize = 64)
{
    $avatarhash = md5($iUserId);
    #error_log( "\$avatarhash: $avatarhash" );
    $avatarsize = $iUserImageDefaultSize;
    /* parse hash string */
    $csh = hexdec(substr($avatarhash, 0, 1));
    // corner sprite shape
    $ssh = hexdec(substr($avatarhash, 1, 1));
    // side sprite shape
    $xsh = hexdec(substr($avatarhash, 2, 1)) & 7;
    // center sprite shape
    $cro = hexdec(substr($avatarhash, 3, 1)) & 3;
    // corner sprite rotation
    $sro = hexdec(substr($avatarhash, 4, 1)) & 3;
    // side sprite rotation
    $xbg = hexdec(substr($avatarhash, 5, 1)) % 2;
    // center sprite background
    /* corner sprite foreground color */
    $cfr = hexdec(substr($avatarhash, 6, 2));
    $cfg = hexdec(substr($avatarhash, 8, 2));
    $cfb = hexdec(substr($avatarhash, 10, 2));
    /* side sprite foreground color */
    $sfr = hexdec(substr($avatarhash, 12, 2));
    $sfg = hexdec(substr($avatarhash, 14, 2));
    $sfb = hexdec(substr($avatarhash, 16, 2));
    /* final angle of rotation */
    $angle = hexdec(substr($avatarhash, 18, 2));
    /* size of each sprite */
    $spriteZ = 128;
    /* start with blank 3x3 identicon */
    $identicon = imagecreatetruecolor($spriteZ * 3, $spriteZ * 3);
    imageantialias($identicon, TRUE);
    /* assign white as background */
    $bg = imagecolorallocate($identicon, 255, 255, 255);
    imagefilledrectangle($identicon, 0, 0, $spriteZ, $spriteZ, $bg);
    /* generate corner sprites */
    $corner = getsprite($csh, $cfr, $cfg, $cfb, $cro, $spriteZ);
    imagecopy($identicon, $corner, 0, 0, 0, 0, $spriteZ, $spriteZ);
    $corner = imagerotate($corner, 90, $bg);
    imagecopy($identicon, $corner, 0, $spriteZ * 2, 0, 0, $spriteZ, $spriteZ);
    $corner = imagerotate($corner, 90, $bg);
    imagecopy($identicon, $corner, $spriteZ * 2, $spriteZ * 2, 0, 0, $spriteZ, $spriteZ);
    $corner = imagerotate($corner, 90, $bg);
    imagecopy($identicon, $corner, $spriteZ * 2, 0, 0, 0, $spriteZ, $spriteZ);
    /* generate side sprites */
    $side = getsprite($ssh, $sfr, $sfg, $sfb, $sro, $spriteZ);
    imagecopy($identicon, $side, $spriteZ, 0, 0, 0, $spriteZ, $spriteZ);
    $side = imagerotate($side, 90, $bg);
    imagecopy($identicon, $side, 0, $spriteZ, 0, 0, $spriteZ, $spriteZ);
    $side = imagerotate($side, 90, $bg);
    imagecopy($identicon, $side, $spriteZ, $spriteZ * 2, 0, 0, $spriteZ, $spriteZ);
    $side = imagerotate($side, 90, $bg);
    imagecopy($identicon, $side, $spriteZ * 2, $spriteZ, 0, 0, $spriteZ, $spriteZ);
    /* generate center sprite */
    $center = getcenter($xsh, $cfr, $cfg, $cfb, $sfr, $sfg, $sfb, $xbg, $spriteZ);
    imagecopy($identicon, $center, $spriteZ, $spriteZ, 0, 0, $spriteZ, $spriteZ);
    // $identicon=imagerotate($identicon,$angle,$bg);
    /* make white transparent */
    imagecolortransparent($identicon, $bg);
    /* create blank image according to specified dimensions */
    $resized = imagecreatetruecolor($avatarsize, $avatarsize);
    imageantialias($resized, TRUE);
    /* assign white as background */
    $bg = imagecolorallocate($resized, 255, 255, 255);
    imagefilledrectangle($resized, 0, 0, $avatarsize, $avatarsize, $bg);
    /* resize identicon according to specification */
    imagecopyresampled($resized, $identicon, 0, 0, (imagesx($identicon) - $spriteZ * 3) / 2, (imagesx($identicon) - $spriteZ * 3) / 2, $avatarsize, $avatarsize, $spriteZ * 3, $spriteZ * 3);
    /* make white transparent */
    imagecolortransparent($resized, $bg);
    /* and finally, send to standard output */
    #header("Content-Type: image/png");
    #imagepng($resized);
    // Enable output buffering
    ob_start();
    // Stream raw PNG image data
    imagepng($resized);
    // Capture the output
    $rawpngidenticon = ob_get_contents();
    // Clear the output buffer
    ob_end_clean();
    return $rawpngidenticon;
}
예제 #2
0
$identicon = imagecreatetruecolor($spriteZ * 3, $spriteZ * 3);
imageantialias($identicon, TRUE);
/* assign white as background */
$bg = imagecolorallocate($identicon, 255, 255, 255);
imagefilledrectangle($identicon, 0, 0, $spriteZ, $spriteZ, $bg);
/* generate corner sprites */
$corner = getsprite($csh, $cfr, $cfg, $cfb, $cro);
imagecopy($identicon, $corner, 0, 0, 0, 0, $spriteZ, $spriteZ);
$corner = imagerotate($corner, 90, $bg);
imagecopy($identicon, $corner, 0, $spriteZ * 2, 0, 0, $spriteZ, $spriteZ);
$corner = imagerotate($corner, 90, $bg);
imagecopy($identicon, $corner, $spriteZ * 2, $spriteZ * 2, 0, 0, $spriteZ, $spriteZ);
$corner = imagerotate($corner, 90, $bg);
imagecopy($identicon, $corner, $spriteZ * 2, 0, 0, 0, $spriteZ, $spriteZ);
/* generate side sprites */
$side = getsprite($ssh, $sfr, $sfg, $sfb, $sro);
imagecopy($identicon, $side, $spriteZ, 0, 0, 0, $spriteZ, $spriteZ);
$side = imagerotate($side, 90, $bg);
imagecopy($identicon, $side, 0, $spriteZ, 0, 0, $spriteZ, $spriteZ);
$side = imagerotate($side, 90, $bg);
imagecopy($identicon, $side, $spriteZ, $spriteZ * 2, 0, 0, $spriteZ, $spriteZ);
$side = imagerotate($side, 90, $bg);
imagecopy($identicon, $side, $spriteZ * 2, $spriteZ, 0, 0, $spriteZ, $spriteZ);
/* generate center sprite */
$center = getcenter($xsh, $cfr, $cfg, $cfb, $sfr, $sfg, $sfb, $xbg);
imagecopy($identicon, $center, $spriteZ, $spriteZ, 0, 0, $spriteZ, $spriteZ);
// $identicon=imagerotate($identicon,$angle,$bg);
/* make white transparent */
imagecolortransparent($identicon, $bg);
/* create blank image according to specified dimensions */
$resized = imagecreatetruecolor($_GET["size"], $_GET["size"]);
예제 #3
0
function identicon($name, $size = 48)
{
    global $spriteZ;
    /* hash name */
    $hash = md5($name);
    /* parse hash string */
    $csh = hexdec(substr($hash, 0, 1));
    // corner sprite shape
    $ssh = hexdec(substr($hash, 1, 1));
    // side sprite shape
    $xsh = hexdec(substr($hash, 2, 1)) & 7;
    // center sprite shape
    $cro = hexdec(substr($hash, 3, 1)) & 3;
    // corner sprite rotation
    $sro = hexdec(substr($hash, 4, 1)) & 3;
    // side sprite rotation
    $xbg = hexdec(substr($hash, 5, 1)) % 2;
    // center sprite background
    /* corner sprite foreground color */
    $cfr = hexdec(substr($hash, 6, 2));
    $cfg = hexdec(substr($hash, 8, 2));
    $cfb = hexdec(substr($hash, 10, 2));
    /* side sprite foreground color */
    $sfr = hexdec(substr($hash, 12, 2));
    $sfg = hexdec(substr($hash, 14, 2));
    $sfb = hexdec(substr($hash, 16, 2));
    /* final angle of rotation */
    $angle = hexdec(substr($hash, 18, 2));
    /* size of each sprite */
    $spriteZ = 128;
    /* start with blank 3x3 identicon */
    $identicon = imagecreatetruecolor($spriteZ * 3, $spriteZ * 3);
    //	imageantialias($identicon,TRUE);
    /* assign white as background */
    $bg = imagecolorallocate($identicon, 255, 255, 255);
    imagefilledrectangle($identicon, 0, 0, $spriteZ, $spriteZ, $bg);
    /* generate corner sprites */
    $corner = getsprite($csh, $cfr, $cfg, $cfb, $cro);
    imagecopy($identicon, $corner, 0, 0, 0, 0, $spriteZ, $spriteZ);
    $corner = imagerotate($corner, 90, $bg);
    imagecopy($identicon, $corner, 0, $spriteZ * 2, 0, 0, $spriteZ, $spriteZ);
    $corner = imagerotate($corner, 90, $bg);
    imagecopy($identicon, $corner, $spriteZ * 2, $spriteZ * 2, 0, 0, $spriteZ, $spriteZ);
    $corner = imagerotate($corner, 90, $bg);
    imagecopy($identicon, $corner, $spriteZ * 2, 0, 0, 0, $spriteZ, $spriteZ);
    /* generate side sprites */
    $side = getsprite($ssh, $sfr, $sfg, $sfb, $sro);
    imagecopy($identicon, $side, $spriteZ, 0, 0, 0, $spriteZ, $spriteZ);
    $side = imagerotate($side, 90, $bg);
    imagecopy($identicon, $side, 0, $spriteZ, 0, 0, $spriteZ, $spriteZ);
    $side = imagerotate($side, 90, $bg);
    imagecopy($identicon, $side, $spriteZ, $spriteZ * 2, 0, 0, $spriteZ, $spriteZ);
    $side = imagerotate($side, 90, $bg);
    imagecopy($identicon, $side, $spriteZ * 2, $spriteZ, 0, 0, $spriteZ, $spriteZ);
    /* generate center sprite */
    $center = getcenter($xsh, $cfr, $cfg, $cfb, $sfr, $sfg, $sfb, $xbg);
    imagecopy($identicon, $center, $spriteZ, $spriteZ, 0, 0, $spriteZ, $spriteZ);
    $identicon = imagerotate($identicon, $angle, $bg);
    /* make white transparent */
    imagecolortransparent($identicon, $bg);
    /* create blank image according to specified dimensions */
    $resized = imagecreatetruecolor($size, $size);
    //	imageantialias($resized,TRUE);
    /* assign white as background */
    $bg = imagecolorallocate($resized, 255, 255, 255);
    imagefilledrectangle($resized, 0, 0, $size, $size, $bg);
    /* resize identicon according to specification */
    imagecopyresampled($resized, $identicon, 0, 0, (imagesx($identicon) - $spriteZ * 3) / 2, (imagesx($identicon) - $spriteZ * 3) / 2, $size, $size, $spriteZ * 3, $spriteZ * 3);
    /* make white transparent */
    imagecolortransparent($resized, $bg);
    /* return image */
    return $resized;
}