> 1) % 4; $B = ($ColorNum >> 3) % 2; return array($R * 240 + 6, $G * 80 + 6, $B * 240 + 6); } function getLightColor($ColorNum) { global $VirtBlack; global $VirtWhite; $Color = getVividColor($ColorNum); for($i = 0; $i < 3; $i++) { $Color[$i] = ((($VirtWhite[$i] - $VirtBlack[$i]) / 255) * $Color[$i] + $VirtBlack[$i]) / 3 + $VirtWhite[$i] / 2; } return $Color; } function getMiddleColor($ColorNum) { global $VirtBlack; global $VirtWhite; $Color = getVividColor($ColorNum); for($i = 0; $i < 3; $i++) { $Color[$i] = ((($VirtWhite[$i] - $VirtBlack[$i]) / 255) * $Color[$i] + $VirtBlack[$i]) / 3 + $VirtBlack[$i] / 4 + $VirtWhite[$i] / 4; } return $Color; } function getDarkColor($ColorNum) { global $VirtBlack; global $VirtWhite; $Color = getVividColor($ColorNum); for($i = 0; $i < 3; $i++) { $Color[$i] = ((($VirtWhite[$i] - $VirtBlack[$i]) / 255) * $Color[$i] + $VirtBlack[$i]) / 2 + $VirtBlack[$i] / 2; } return $Color; } function getColorTile($Size, $ColorNum) { $Sprite=imagecreatetruecolor($Size,$Size); imageantialias($Sprite,FALSE); list($fR, $fG, $fB) = getLightColor($ColorNum); $fg=imagecolorallocate($Sprite,$fR,$fG,$fB); imagefilledrectangle($Sprite,0,0,$Size,$Size,$fg); return $Sprite; } function getBlockTile($Size, $ColorNum) { $Sprite=imagecreatetruecolor($Size,$Size); imageantialias($Sprite,FALSE); list($bR, $bG, $bB) = getMiddleColor($ColorNum); $bg=imagecolorallocate($Sprite,$bR,$bG,$bB); imagefilledrectangle($Sprite,0,0,$Size,$Size,$bg); list($fR, $fG, $fB) = getDarkColor($ColorNum); $fg=imagecolorallocate($Sprite,0,0,0); $shape=array( array(0,0,1,0), array(0.25,0,0.25,0.5), array(0,0.5,1,0.5), array(0.75,0.5,0.75,1) ); for($x = 0; $x < 2; $x++) { for($y = 0; $y < 2; $y++) { foreach($shape as $line) { $sx = ($x + $line[0]) * $Size / 2; $sy = ($y + $line[1]) * $Size / 2; $dx = ($x + $line[2]) * $Size / 2; $dy = ($y + $line[3]) * $Size / 2; imageline($Sprite,$sx,$sy,$dx,$dy,$fg); // imageline($Sprite,$sx + 1,$sy + 1,$dx + 1,$dy + 1,$fg); } } } return $Sprite; } function resetTransparancyAndColor($SrcImage, $Color) { global $VirtWhite; imageTrueColorToPalette($SrcImage,true,256); $ColorCount = imagecolorstotal($SrcImage); for ($ColorIndex = 0; $ColorIndex < $ColorCount; $ColorIndex++) { $ColorArray = imagecolorsforindex($SrcImage, $ColorIndex); $Brightness = 1 - (($ColorArray['red'] + $ColorArray['green'] + $ColorArray['blue'])/(255 * 3)); if ($Brightness > 0.01) { imagecolorset($SrcImage, $ColorIndex, $Color[0] * $Brightness,$Color[1] * $Brightness,$Color[2] * $Brightness); } else { imagecolorset($SrcImage, $ColorIndex,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); } } $MidImage = imageCreateTrueColor(imagesx($SrcImage), imagesy($SrcImage)); imageantialias($MidImage,false); imageCopy($MidImage, $SrcImage, 0, 0, 0, 0, imagesx($SrcImage), imagesy($SrcImage)); imageDestroy($SrcImage); $Tran=imagecolorallocate($MidImage,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); imagecolortransparent($MidImage, $Tran); return $MidImage; } function resetTransparancy($SrcImage) { global $VirtWhite; imageTrueColorToPalette($SrcImage,true,256); $ColorCount = imagecolorstotal($SrcImage); for ($ColorIndex = 0; $ColorIndex < $ColorCount; $ColorIndex++) { $ColorArray = imagecolorsforindex($SrcImage, $ColorIndex); $TransMatchness = abs(($VirtWhite[0] - $ColorArray['red']) + abs($VirtWhite[1] - $ColorArray['green']) + abs($VirtWhite[2] - $ColorArray['blue'])) / (255 * 3); if ($TransMatchness < 0.01) { imagecolorset($SrcImage, $ColorIndex,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); } } $MidImage = imageCreateTrueColor(imagesx($SrcImage), imagesy($SrcImage)); imageantialias($MidImage,false); imageCopy($MidImage, $SrcImage, 0, 0, 0, 0, imagesx($SrcImage), imagesy($SrcImage)); imageDestroy($SrcImage); $Tran=imagecolorallocate($MidImage,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); imagecolortransparent($MidImage, $Tran); return $MidImage; } function getShieldShape($CenterX, $CenterY, $BaseSizeX, $BaseSize) { $Shape = array( $CenterX - $BaseSizeX / 2, $CenterY - $BaseSize / 2, $CenterX - $BaseSizeX / 2, $CenterY, $CenterX - $BaseSizeX / 2 + 1 * $BaseSizeX / 32, $CenterY + 3 * $BaseSize / 16, $CenterX - $BaseSizeX / 2 + 2 * $BaseSizeX / 32, $CenterY + 4 * $BaseSize / 16, $CenterX - $BaseSizeX / 2 + 4 * $BaseSizeX / 32, $CenterY + 5 * $BaseSize / 16, $CenterX - $BaseSizeX / 2 + 8 * $BaseSizeX / 32, $CenterY + 6 * $BaseSize / 16, $CenterX, $CenterY + $BaseSize / 2, $CenterX + $BaseSizeX / 2 - 8 * $BaseSizeX / 32, $CenterY + 6 * $BaseSize / 16, $CenterX + $BaseSizeX / 2 - 4 * $BaseSizeX / 32, $CenterY + 5 * $BaseSize / 16, $CenterX + $BaseSizeX / 2 - 2 * $BaseSizeX / 32, $CenterY + 4 * $BaseSize / 16, $CenterX + $BaseSizeX / 2 - 1 * $BaseSizeX / 32, $CenterY + 3 * $BaseSize / 16, $CenterX + $BaseSizeX / 2, $CenterY, $CenterX + $BaseSizeX / 2, $CenterY - $BaseSize / 2, $CenterX - $BaseSizeX / 2, $CenterY - $BaseSize / 2, ); return $Shape; } function getShieldShape2($CenterX, $CenterY, $BaseSizeX, $BaseSize) { $Shape = array( $CenterX - $BaseSizeX / 2, $CenterY - $BaseSize / 2 + $BaseSize / 16, $CenterX - $BaseSizeX / 2, $CenterY, $CenterX - $BaseSizeX / 2 + 1 * $BaseSizeX / 32, $CenterY + 3 * $BaseSize / 16, $CenterX - $BaseSizeX / 2 + 2 * $BaseSizeX / 32, $CenterY + 4 * $BaseSize / 16, $CenterX - $BaseSizeX / 2 + 4 * $BaseSizeX / 32, $CenterY + 5 * $BaseSize / 16, $CenterX - $BaseSizeX / 2 + 8 * $BaseSizeX / 32, $CenterY + 6 * $BaseSize / 16, $CenterX, $CenterY + $BaseSize / 2, $CenterX + $BaseSizeX / 2 - 8 * $BaseSizeX / 32, $CenterY + 6 * $BaseSize / 16, $CenterX + $BaseSizeX / 2 - 4 * $BaseSizeX / 32, $CenterY + 5 * $BaseSize / 16, $CenterX + $BaseSizeX / 2 - 2 * $BaseSizeX / 32, $CenterY + 4 * $BaseSize / 16, $CenterX + $BaseSizeX / 2 - 1 * $BaseSizeX / 32, $CenterY + 3 * $BaseSize / 16, $CenterX + $BaseSizeX / 2, $CenterY, $CenterX + $BaseSizeX / 2, $CenterY - $BaseSize / 2 + $BaseSize / 16, $CenterX + $BaseSizeX / 4 + $BaseSizeX / 8, $CenterY - $BaseSize / 2 + $BaseSize / 16, $CenterX + $BaseSizeX / 4 + $BaseSizeX / 8, $CenterY - $BaseSize / 2 - $BaseSize / 8 + $BaseSize / 16, $CenterX - $BaseSizeX / 4 - $BaseSizeX / 8, $CenterY - $BaseSize / 2 - $BaseSize / 8 + $BaseSize / 16, $CenterX - $BaseSizeX / 4 - $BaseSizeX / 8, $CenterY - $BaseSize / 2 + $BaseSize / 16, $CenterX - $BaseSizeX / 2, $CenterY - $BaseSize / 2 + $BaseSize / 16, ); return $Shape; } function drawMotif($Image, $MotifNum, $ColorNum, $MottoNum, $MottoColor) { global $VirtWhite; global $White; $Color = getDarkColor($ColorNum); $fg=imagecolorallocate($Image,$Color[0],$Color[1],$Color[2]); $CenterX = imagesx($Image) / 2; $CenterY = imagesy($Image) / 2; $Height = imagesy($Image); $Width = imagesx($Image); $CalcZoom = ($Width / $Height < 1) ? $Width / $Height : 1; $ImageIndex = $MotifNum % 16; $MotifNum = $MotifNum >> 4; // test - leo $SrcImage = imagecreatefrompng('img/'.($ImageIndex % 16).".png"); $MidImage = resetTransparancyAndColor($SrcImage, $Color); if ($MotifNum % 2) { $MidImage = Mirror($MidImage); $Tran=imagecolorallocate($MidImage,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); imagecolortransparent($MidImage, $Tran); } $Color = getDarkColor($MottoColor); $MottoImage = imagecreatefrompng('img/M'.($MottoNum % 16).".png"); $MottoImage = resetTransparancyAndColor($MottoImage, $Color); $MottoImage = Zoom($MottoImage, 1 * $CalcZoom); $CenterY -= imagesy($Image) / 16; $OriginMotH = imagesy($MidImage) * $CalcZoom; $LocIndex = ($MotifNum >> 1) % 8; switch ($LocIndex) { case 0: case 1: case 2: $MidImage = Zoom($MidImage, 1 * $CalcZoom); $MotW = imagesx($MidImage); $MotH = imagesy($MidImage); if ($LocIndex != 0) { $GetShapeFunc = ($LocIndex == 1) ? 'getShieldShape' : 'getShieldShape2'; $BaseSize = $MotH * 1.2; $BaseSizeX = $MotW * 1.2; $Shape = $GetShapeFunc($CenterX, $CenterY, $BaseSizeX, $BaseSize); $BaseSize = $MotH * 1.1; $BaseSizeX = $MotW * 1.1; $Shape = array_merge($Shape, $GetShapeFunc($CenterX, $CenterY, $BaseSizeX, $BaseSize)); imagefilledpolygon ($Image , $Shape, count($Shape) /2, $fg); } imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2, $CenterY - $MotH / 2,0,0,$MotW,$MotH,100); break; case 3: // 2 next offset $oMotW = imagesx($MidImage); $oMotH = imagesy($MidImage); $MidImage = Zoom($MidImage, 0.6 * $CalcZoom); $MotW = imagesx($MidImage); $MotH = imagesy($MidImage); // imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 - $MotW / 2,$CenterY - $MotH ,0,0,$MotW,$MotH,100); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 + $MotW / 2 - $MotW / 8,$CenterY + $MotH / 8 - $MotH ,0,0,$MotW,$MotH,100); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 - $MotW / 2 + $MotW / 8,$CenterY - $MotH / 4 ,0,0,$MotW,$MotH,100); // imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 + $MotW / 2,$CenterY ,0,0,$MotW,$MotH,100); $GetShapeFunc = 'getShieldShape'; $BaseSize = $oMotH * $CalcZoom * 1.2; $BaseSizeX = $oMotW * $CalcZoom * 1.2; $Shape = $GetShapeFunc($CenterX, $CenterY, $BaseSizeX, $BaseSize); $BaseSize = $oMotH * $CalcZoom * 1.1; $BaseSizeX = $oMotW * $CalcZoom * 1.1; $Shape = array_merge($Shape, $GetShapeFunc($CenterX, $CenterY, $BaseSizeX, $BaseSize)); imagefilledpolygon ($Image , $Shape, count($Shape) /2, $fg); $MotH = $oMotH * $CalcZoom; break; case 4: // 2 next same dir $MidImage = Zoom($MidImage, 0.9 * $CalcZoom); $MotW = imagesx($MidImage); $MotH = imagesy($MidImage); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 - $MotW / 2,$CenterY - $MotH / 2,0,0,$MotW,$MotH,100); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 + $MotW / 2,$CenterY - $MotH / 2,0,0,$MotW,$MotH,100); break; case 5: // 2 next / different dir $MidImage = Zoom($MidImage, 0.9 * $CalcZoom); $MotW = imagesx($MidImage); $MotH = imagesy($MidImage); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 - $MotW / 1.8,$CenterY - $MotH / 2,0,0,$MotW,$MotH,100); if ($ImageIndex > 10) { $MidImage = Mirror($MidImage); } else { $MidImage = imagerotate($MidImage, 180, $White); } $Tran=imagecolorallocate($MidImage,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); imagecolortransparent($MidImage, $Tran); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 + $MotW / 1.8,$CenterY - $MotH / 2,0,0,$MotW,$MotH,100); break; case 6: // 2 far / different dir $FitZoom = ((imagesx($Image) / 2.7)/imagesx($MidImage)) / $CalcZoom; $MidImage = Zoom($MidImage, min(0.9, $FitZoom) * $CalcZoom); $MotW = imagesx($MidImage); $MotH = imagesy($MidImage); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 - $MotW / 1.2,$CenterY - $MotH / 2,0,0,$MotW,$MotH,100); $MidImage = Mirror($MidImage); $Tran=imagecolorallocate($MidImage,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); imagecolortransparent($MidImage, $Tran); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 + $MotW / 1.2,$CenterY - $MotH / 2,0,0,$MotW,$MotH,100); break; default: // 3 $FitZoom = ((imagesx($Image) / 3)/imagesx($MidImage)) / $CalcZoom; $MidImage = Zoom($MidImage, min(0.8, $FitZoom) * $CalcZoom); $MotW = imagesx($MidImage); $MotH = imagesy($MidImage); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 - $MotW,$CenterY - $MotH / 2,0,0,$MotW,$MotH,100); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2,$CenterY - $MotH / 2,0,0,$MotW,$MotH,100); imagecopymerge($Image,$MidImage,$CenterX - $MotW / 2 + $MotW,$CenterY - $MotH / 2,0,0,$MotW,$MotH,100); break; } $MottoTop = $CenterY + $MotH / 2 + $OriginMotH / 6 - imagesy($MottoImage) / 2; $MotW = imagesx($MottoImage); $MotH = imagesy($MottoImage); imagecopymerge($Image,$MottoImage,$CenterX - $MotW / 2, $MottoTop,0,0,$MotW,$MotH,100); } function Mirror($SrcImage) { $width = imagesx($SrcImage); $height = imagesy($SrcImage); $src_y = 0; $src_height = $height; $src_x = $width -1; $src_width = -$width; $DstImage = imagecreatetruecolor ($width, $height); if (imagecopyresampled($DstImage, $SrcImage, 0, 0, $src_x, $src_y , $width, $height, $src_width, $src_height)) { return $DstImage; } ImageAlphaBlending($DstImage, true); return $SrcImage; } function Zoom($SrcImage, $Ratio) { if ($Ratio ==1) return $SrcImage; $width = imagesx($SrcImage); $height = imagesy($SrcImage); $DstImage = imagecreatetruecolor ($width * $Ratio, $height * $Ratio); imagecopyresampled($DstImage, $SrcImage, 0, 0, 0, 0, $width * $Ratio, $height * $Ratio, $width, $height); return resetTransparancy($DstImage); } function drawNumberdShape($Image, $WriteX, $WriteY, $ShapeNum, $Color, $Ratio, $Alpha, $Dig = false) { global $VirtWhite; $fg=imagecolorallocate($Image,$Color[0],$Color[1],$Color[2]); $Height = imagesy($Image) * $Ratio; $Width = imagesx($Image) * $Ratio; $BaseSize = min($Height, $Width); $CenterX = $Width / 2; $CenterY = $Height / 2; $DstImage = imagecreatetruecolor($Width, $Height); $White=imagecolorallocate($DstImage,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); imagefilledrectangle($DstImage, 0,0,imagesx($Image), imagesy($Image),$White); switch($ShapeNum) { case 0: // filld dia $Shape = array( $CenterX, $CenterY - $BaseSize / 2, $CenterX - $BaseSize / 2, $CenterY, $CenterX, $CenterY + $BaseSize / 2, $CenterX + $BaseSize / 2, $CenterY ); imagefilledpolygon ($DstImage , $Shape, count($Shape) /2, $fg); break; case 1: // fill Circle imagefilledellipse ($DstImage, $CenterX, $CenterY, $BaseSize , $BaseSize , $fg); break; case 2: // fill Square imagefilledrectangle ($DstImage, $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 2, $CenterX + $BaseSize / 2, $CenterY + $BaseSize / 2, $fg); break; case 3: // 2 hrizontal bar imagefilledrectangle ($DstImage, $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 2, $CenterX + $BaseSize / 2, $CenterY - $BaseSize / 4, $fg); imagefilledrectangle ($DstImage, $CenterX - $BaseSize / 2, $CenterY + $BaseSize / 4, $CenterX + $BaseSize / 2, $CenterY + $BaseSize / 2, $fg); break; case 4: // 2 virtical bar imagefilledrectangle ($DstImage, $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 2, $CenterX - $BaseSize / 4, $CenterY + $BaseSize / 2, $fg); imagefilledrectangle ($DstImage, $CenterX + $BaseSize / 4, $CenterY - $BaseSize / 2, $CenterX + $BaseSize / 2, $CenterY + $BaseSize / 2, $fg); break; case 5: // Heart $CenterY -= $BaseSize / 8; $Shape = array( $CenterX - $BaseSize / 32, $CenterY - $BaseSize / 8, $CenterX - $BaseSize / 12, $CenterY - 3 * $BaseSize / 16, $CenterX - $BaseSize / 12, $CenterY - 3 * $BaseSize / 16, $CenterX - $BaseSize / 2 + $BaseSize / 4 + $BaseSize / 16 , $CenterY - 4 * $BaseSize / 16, $CenterX - $BaseSize / 2 + $BaseSize / 4 - $BaseSize / 16 , $CenterY - 4 * $BaseSize / 16, $CenterX - $BaseSize / 2 + $BaseSize / 12, $CenterY - 3 * $BaseSize / 16, $CenterX - $BaseSize / 2 + $BaseSize / 32, $CenterY - $BaseSize / 8, $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 16, $CenterX - $BaseSize / 2, $CenterY, $CenterX - $BaseSize / 2, $CenterY + $BaseSize / 16, $CenterX - $BaseSize / 2 + $BaseSize / 32, $CenterY + $BaseSize / 8, $CenterX - $BaseSize / 2 + $BaseSize / 12, $CenterY + 3 * $BaseSize / 16, $CenterX - $BaseSize / 4, $CenterY + $BaseSize / 4 + $BaseSize / 16, $CenterX - $BaseSize / 32, $CenterY + $BaseSize / 2, $CenterX, $CenterY + $BaseSize / 2 + $BaseSize / 24, $CenterX + $BaseSize / 32, $CenterY + $BaseSize / 2, $CenterX + $BaseSize / 4, $CenterY + $BaseSize / 4 + $BaseSize / 16, $CenterX + $BaseSize / 2 - $BaseSize / 12, $CenterY + 3 * $BaseSize / 16, $CenterX + $BaseSize / 2 - $BaseSize / 32, $CenterY + $BaseSize / 8, $CenterX + $BaseSize / 2, $CenterY + $BaseSize / 16, $CenterX + $BaseSize / 2, $CenterY, $CenterX + $BaseSize / 2, $CenterY - $BaseSize / 16, $CenterX + $BaseSize / 2 - $BaseSize / 32, $CenterY - $BaseSize / 8, $CenterX + $BaseSize / 2 - $BaseSize / 12, $CenterY - 3 * $BaseSize / 16, $CenterX + $BaseSize / 2 - $BaseSize / 4 + $BaseSize / 16 , $CenterY - 4 * $BaseSize / 16, $CenterX + $BaseSize / 2 - $BaseSize / 4 - $BaseSize / 16 , $CenterY - 4 * $BaseSize / 16, $CenterX + $BaseSize / 12, $CenterY - 3 * $BaseSize / 16, $CenterX + $BaseSize / 12, $CenterY - 3 * $BaseSize / 16, $CenterX + $BaseSize / 32, $CenterY - $BaseSize / 8, $CenterX, $CenterY - $BaseSize / 12, ); imagefilledpolygon ($DstImage , $Shape, count($Shape) /2, $fg); break; case 6: // void dia $Shape = array( $CenterX, $CenterY - $BaseSize / 2, $CenterX - $BaseSize / 2, $CenterY, $CenterX, $CenterY + $BaseSize / 2, $CenterX + $BaseSize / 2, $CenterY ); imagefilledpolygon ($DstImage , $Shape, count($Shape) /2, $fg); $Shape = array( $CenterX, $CenterY - $BaseSize / 4, $CenterX - $BaseSize / 4, $CenterY, $CenterX, $CenterY + $BaseSize / 4, $CenterX + $BaseSize / 4, $CenterY ); imagefilledpolygon ($DstImage , $Shape, count($Shape) /2, $White); break; case 7: // Shield $Shape = array( $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 2, $CenterX - $BaseSize / 2, $CenterY, $CenterX - $BaseSize / 2 + 1 * $BaseSize / 32, $CenterY + 3 * $BaseSize / 16, $CenterX - $BaseSize / 2 + 2 * $BaseSize / 32, $CenterY + 4 * $BaseSize / 16, $CenterX - $BaseSize / 2 + 4 * $BaseSize / 32, $CenterY + 5 * $BaseSize / 16, $CenterX - $BaseSize / 2 + 8 * $BaseSize / 32, $CenterY + 6 * $BaseSize / 16, $CenterX, $CenterY + $BaseSize / 2, $CenterX + $BaseSize / 2 - 8 * $BaseSize / 32, $CenterY + 6 * $BaseSize / 16, $CenterX + $BaseSize / 2 - 4 * $BaseSize / 32, $CenterY + 5 * $BaseSize / 16, $CenterX + $BaseSize / 2 - 2 * $BaseSize / 32, $CenterY + 4 * $BaseSize / 16, $CenterX + $BaseSize / 2 - 1 * $BaseSize / 32, $CenterY + 3 * $BaseSize / 16, $CenterX + $BaseSize / 2, $CenterY, $CenterX + $BaseSize / 2, $CenterY - $BaseSize / 2, ); imagefilledpolygon ($DstImage , $Shape, count($Shape) /2, $fg); break; case 8: // filld traiangle A $Shape = array( $CenterX + $BaseSize / 2, $CenterY - $BaseSize / 2, $CenterX - $BaseSize / 2, $CenterY + $BaseSize / 2, $CenterX + $BaseSize / 2, $CenterY + $BaseSize / 2, ); imagefilledpolygon ($DstImage , $Shape, count($Shape) /2, $fg); break; case 9: // filld traiangle B $Shape = array( $CenterX + $BaseSize / 2, $CenterY - $BaseSize / 2, $CenterX - $BaseSize / 2, $CenterY + $BaseSize / 2, $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 2, ); imagefilledpolygon ($DstImage , $Shape, count($Shape) /2, $fg); break; case 10: // filld traiangle C $Shape = array( $CenterX + $BaseSize / 2, $CenterY - $BaseSize / 2, $CenterX + $BaseSize / 2, $CenterY + $BaseSize / 2, $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 2, ); imagefilledpolygon ($DstImage , $Shape, count($Shape) /2, $fg); break; case 11: // filld traiangle D $Shape = array( $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 2, $CenterX - $BaseSize / 2, $CenterY + $BaseSize / 2, $CenterX + $BaseSize / 2, $CenterY + $BaseSize / 2, ); imagefilledpolygon ($DstImage , $Shape, count($Shape) /2, $fg); break; case 12: // cross $Shape = array( $CenterX - $BaseSize / 6, $CenterY - $BaseSize / 2, $CenterX - $BaseSize / 6, $CenterY - $BaseSize / 6, $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 6, $CenterX - $BaseSize / 2, $CenterY + $BaseSize / 6, $CenterX - $BaseSize / 6, $CenterY + $BaseSize / 6, $CenterX - $BaseSize / 6, $CenterY + $BaseSize / 2, $CenterX + $BaseSize / 6, $CenterY + $BaseSize / 2, $CenterX + $BaseSize / 6, $CenterY + $BaseSize / 6, $CenterX + $BaseSize / 2, $CenterY + $BaseSize / 6, $CenterX + $BaseSize / 2, $CenterY - $BaseSize / 6, $CenterX + $BaseSize / 6, $CenterY - $BaseSize / 6, $CenterX + $BaseSize / 6, $CenterY - $BaseSize / 2, ); imagefilledpolygon($DstImage , $Shape, count($Shape) /2, $fg); break; case 13: // void square // fill Square imagefilledrectangle ($DstImage, $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 2, $CenterX + $BaseSize / 2, $CenterY + $BaseSize / 2, $fg); imagefilledrectangle ($DstImage, $CenterX - $BaseSize / 4, $CenterY - $BaseSize / 4, $CenterX + $BaseSize / 4, $CenterY + $BaseSize / 4, $White); break; case 14: // x $Shape = array( $CenterX - $BaseSize / 6, $CenterY - $BaseSize / 2, $CenterX - $BaseSize / 6, $CenterY - $BaseSize / 6, $CenterX - $BaseSize / 2, $CenterY - $BaseSize / 6, $CenterX - $BaseSize / 2, $CenterY + $BaseSize / 6, $CenterX - $BaseSize / 6, $CenterY + $BaseSize / 6, $CenterX - $BaseSize / 6, $CenterY + $BaseSize / 2, $CenterX + $BaseSize / 6, $CenterY + $BaseSize / 2, $CenterX + $BaseSize / 6, $CenterY + $BaseSize / 6, $CenterX + $BaseSize / 2, $CenterY + $BaseSize / 6, $CenterX + $BaseSize / 2, $CenterY - $BaseSize / 6, $CenterX + $BaseSize / 6, $CenterY - $BaseSize / 6, $CenterX + $BaseSize / 6, $CenterY - $BaseSize / 2, ); imagefilledpolygon ($DstImage , $Shape, count($Shape) /2, $fg); $MidImage = imagerotate($DstImage, 45, $White); imagecopy($DstImage,$MidImage,(imagesx($DstImage) - imagesx($MidImage)) / 2,(imagesy($DstImage) - imagesy($MidImage)) / 2,0,0,imagesx($MidImage),imagesy($MidImage)); break; default: // void Circle imagefilledellipse ($DstImage, $CenterX, $CenterY, $BaseSize , $BaseSize , $fg); imagefilledellipse ($DstImage, $CenterX, $CenterY, 3 * $BaseSize / 4, 3 * $BaseSize / 4, $White); break; } if ($Dig !== false) imagefilledrectangle ($DstImage, $CenterX - $BaseSize / 2, $CenterY, $CenterX, $CenterY + $BaseSize / 2, $White); $DstImage = imagerotate($DstImage, $Dig, $White); $Tran=imagecolorallocate($DstImage,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); imagecolortransparent($DstImage, $Tran); imagecopymerge($Image,$DstImage,$WriteX - imagesx($DstImage) / 2,$WriteY - imagesy($DstImage) / 2,0,0,imagesx($DstImage), imagesy($DstImage),$Alpha); } function getRequestVal($Key, $Default) { return (isset($_REQUEST[$Key]) && trim(isset($_REQUEST[$Key])) != "") ? $_REQUEST[$Key] : $Default; } global $VirtWhite; global $VirtBlack; $BackColorHex=getRequestVal('color', 'FFFFFF'); $VirtWhite=array(hexdec(substr($BackColorHex,0,2)),hexdec(substr($BackColorHex,2,2)),hexdec(substr($BackColorHex,4,2))); $VirtBlack=array($VirtWhite[0] < 128 ? 255 : 0,$VirtWhite[1] < 128 ? 255 : 0,$VirtWhite[2] < 128 ? 255 : 0); $BaseSize = 192; $bSimple = (getRequestVal('simple', '') !=''); $WantHeight = max(0,min(192,getRequestVal('size', 96))); $WantWidth = max(0,min(192,getRequestVal('width', $WantHeight * ($bSimple ? 1 : 1.5)))); $SourceValue = getRequestVal('src', 'nonaka@qu-bit.com'); $BaseHash = getRequestVal('hash', md5($SourceValue)); $Aspect = $WantWidth / $WantHeight; $TeenageIdenticon=imagecreatetruecolor($BaseSize*$Aspect,$BaseSize); imageantialias($TeenageIdenticon,TRUE); global $White; $White=imagecolorallocate($TeenageIdenticon,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); imagefilledrectangle($TeenageIdenticon,0,0,$BaseSize*$Aspect,$BaseSize,$White); imagecolortransparent($TeenageIdenticon,$White); /* $x = 0; $Size = $BaseSize / 2; for ($x = 0; $x < 8; $x+=7) { for ($y = 0; $y < 4; $y++) { $panel=getBlockTile($Size, hexdec(substr($BaseHash,$x * 4 + $y,1))); // corner Sprite shape imagecopy($TeenageIdenticon,$panel,$x * $Size,$y * $Size,0,0,$Size,$Size); } } */ $ImageStartLoc = 0; $Size = min($BaseSize, $BaseSize * $Aspect) / 4; if ($bSimple === false) { for ($x = 0; $x < 2; $x++) { for ($y = 0; $y < 4; $y++) { if ($Aspect > 1) { $CenterX = $Size + $x * ($BaseSize * $Aspect - $Size * 2); $CenterY = $Size * (0.8 + $y * 0.8); } else { $CenterX = $Size * (0.8 + $y * 0.8); $CenterY = $Size + $x * ($BaseSize - $Size * 2); } drawNumberdShape($TeenageIdenticon,$CenterX, $CenterY, hexdec(substr($BaseHash,$x*12+$y*3,1)), getMiddleColor(hexdec(substr($BaseHash,$x*12+$y*3 + 1,1))) ,0.4, 40, hexdec(substr($BaseHash,$x*12+$y*3 + 2,1)) * 360 / 16); } } } $CenterX = $BaseSize * $Aspect / 2; $CenterY = $BaseSize / 2; drawNumberdShape($TeenageIdenticon,$CenterX, $CenterY - $Size * 0.5, hexdec(substr($BaseHash,24,1)), getLightColor(hexdec(substr($BaseHash,25,1))) ,0.6, 60); drawNumberdShape($TeenageIdenticon,$CenterX, $CenterY + $Size * 0.5, hexdec(substr($BaseHash,24,1)), getLightColor(hexdec(substr($BaseHash,26,1))) ,0.4, 80); drawMotif($TeenageIdenticon,hexdec(substr($BaseHash,27,2)), hexdec(substr($BaseHash,29,1)) ,hexdec(substr($BaseHash,30,1)), hexdec(substr($BaseHash,31,1))); // Resize $ResizedImage=imagecreatetruecolor($WantWidth,$WantHeight); imageantialias($ResizedImage,TRUE); $bg=imagecolorallocate($ResizedImage,$VirtWhite[0],$VirtWhite[1],$VirtWhite[2]); imagefilledrectangle($ResizedImage,0,0,$WantWidth,$WantHeight,$bg); imagecopyresampled($ResizedImage,$TeenageIdenticon,0,0,0,0,$WantWidth,$WantHeight,$BaseSize * $Aspect,$BaseSize); // Set transparent imagecolortransparent($ResizedImage,$bg); // send to standard output header("Content-Type: image/png"); imagepng($ResizedImage); ?>