A while back I posted on how to create dynamic Google maps markers which allow for any colour and any text in the classic Google map style.
Recently, I have had a need to do the same with circular markers. It uses the ‘Image Smooth Arc‘ function provided by Ulrich Mierendorff.
Similarly, I provide a little demo of some PHP code that does this that I quickly whipped up. Here are some example markers:
(Have a look at the image name)
Now that gets a little boring, how about some color:
(Again, have a look at the image name)
Again, you will need to download the modified arial font and host it in the same directory.
Have a look at the PHP source code below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | <?php include ( "imageSmoothArc_optimized.php" ); $color = $_GET [ 'color' ]; if (! $color ) { $color = "ff776b" ;} //default google map color $color = str_replace ( "#" , "" , $color ); $string = $_GET [ 'text' ]; $font = realpath ( 'arial.ttf' ); //unfortunately we still must do some offsetting switch (ord( substr ( $string ,0,1))) { case 49: //1 $offset = -2; break ; case 55: //7 $offset = -1; break ; case 65: //A $offset = 1; break ; case 74: //J $offset = -1; break ; case 84: //T $offset = 1; break ; case 99: //c $offset = -1; break ; case 106: //j $offset = 1; break ; } if ( strlen ( $string ) == 1) { $fontsize = 10.5; } else if ( strlen ( $string ) == 2) { $fontsize = 9; } else { $fontsize = 10.5; $offset = 0; //reset offset $string = chr (149); } $bbox = imagettfbbox( $fontsize , 0, $font , $string ); $width = $bbox [2] - $bbox [0] + 1; $height = $bbox [1] - $bbox [7] + 1; $im = imagecreatetruecolor(20, 20); //add the alpha $trans_colour = imagecolorallocatealpha( $im , 0, 0, 0, 127); imagefill( $im , 0, 0, $trans_colour ); imageAlphaBlending( $im , true); imageSaveAlpha( $im , true); $bord_ellipse = array (0, 0, 0, 0); imageSmoothArc( $im , 9, 10, 17, 17, $bord_ellipse , 0, 2*M_PI); //x, y, width, hegiht $fill_ellipse = array (hexdec( substr ( $color ,0,2)), hexdec( substr ( $color ,2,2)), hexdec( substr ( $color ,4,2)), 0); imageSmoothArc( $im , 9, 10, 16, 16, $fill_ellipse , 0, 2*M_PI); //x, y, width, hegiht $black = imagecolorallocate( $im , 0, 0, 0); imagettftext( $im , $fontsize , 0, 11 - $width /2 + $offset , 9 + $height /2, $black , $font , $string ); header( "Content-type: image/png" ); imagepng( $im ); imagedestroy( $im ); ?> |
EDIT: 8 September 2014
Fixed a “Call-time pass-by-reference has been removed” error with ‘imageSmoothArc_optimized.php’. If you are experiencing the same with imageSmoothArc simple replace all instances of ‘&$’ with ‘$’.