gb115b Posted April 26, 2006 Share Posted April 26, 2006 hello,i've been trying to produce nicely graphics with nice anti-aliased edges (provided by a proper alpha channel using .PNG files)i've got two files which you can see at [a href=\"http://g.is-a-geek.com/camden101\" target=\"_blank\"]http://g.is-a-geek.com/camden101[/a] my titleimage[code]<?php$strText = "Camden 101";$strFont = "assets/ITCEDSCR.TTF";$intFontSize = 144;$arrSize = imageTTFBBox($intFontSize, 0, $strFont, $strText);$image = imageCreateTrueColor((abs($arrSize[4]) + abs($arrSize[0])), (abs($arrSize[5]) + abs($arrSize[1])));imageSaveAlpha($image, true);ImageAlphaBlending($image, false); $colorTransparent = imagecolorallocatealpha($image, 0, 0, 0, 127);$colorText = imageColorAllocate($image, 51, 204, 255);imagefill($image, 0, 0, $colorTransparent);imagettftext($image, $intFontSize, 0, 0, abs($arrSize[5]), $colorText, $strFont, $strText);// create an interlaced image for better loading in the browserimageInterlace($image, 1);//header("Content-type: image/png");imagePNG($image, "assets/title.png");imagedestroy($image);$strUserAgent = $_SERVER['HTTP_USER_AGENT'];if (strpos($strUserAgent, "MSIE 6") OR strpos($strUserAgent, "MSIE 5.5")) { echo "<img src=\"assets\\spacer.gif\" width=\"".(abs($arrSize[4]) + abs($arrSize[0]))."\" height=\"".(abs($arrSize[5]) + abs($arrSize[1]))."\" style=\"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader( src='assets/title.png', sizingMethod='image');\" alt=\"".$strText."\" border=\"0\" />";} else { echo "<img src=\"assets\\title.png\" alt=\"".$strText."\" border=\"0\" />";}?>[/code]and a menu navigation[code]<?php$arrayMenuItems['Item Name'][0] = "News";$arrayMenuItems['Item Link'][0] = "news.php";$arrayMenuItems['Item Name'][1] = "Events";$arrayMenuItems['Item Link'][1] = "events.php";$arrayMenuItems['Item Name'][2] = "Reviews";$arrayMenuItems['Item Link'][2] = "reviews.php";$arrayMenuItems['Item Name'][3] = "Forums";$arrayMenuItems['Item Link'][3] = "forums.php";$arrayMenuItems['Item Name'][4] = "About";$arrayMenuItems['Item Link'][4] = "about.php";$strFont = "assets/BauHS93.TTF";$intFontSize = 20;$intAngleRotation = 30; function imageSmoothCircle( &$img, $cx, $cy, $cr, $color ) { $ir = $cr; $ix = 0; $iy = $ir; $ig = 2 * $ir - 3; $idgr = -6; $idgd = 4 * $ir - 10; $fill = imageColorExactAlpha( $img, $color[ 'R' ], $color[ 'G' ], $color[ 'B' ], 0 ); imageLine( $img, $cx + $cr - 1, $cy, $cx, $cy, $fill ); imageLine( $img, $cx - $cr + 1, $cy, $cx - 1, $cy, $fill ); imageLine( $img, $cx, $cy + $cr - 1, $cx, $cy + 1, $fill ); imageLine( $img, $cx, $cy - $cr + 1, $cx, $cy - 1, $fill ); $draw = imageColorExactAlpha( $img, $color[ 'R' ], $color[ 'G' ], $color[ 'B' ], 42 ); imageSetPixel( $img, $cx + $cr, $cy, $draw ); imageSetPixel( $img, $cx - $cr, $cy, $draw ); imageSetPixel( $img, $cx, $cy + $cr, $draw ); imageSetPixel( $img, $cx, $cy - $cr, $draw ); while ( $ix <= $iy - 2 ) { if ( $ig < 0 ) { $ig += $idgd; $idgd -= 8; $iy--; } else { $ig += $idgr; $idgd -= 4; } $idgr -= 4; $ix++; imageLine( $img, $cx + $ix, $cy + $iy - 1, $cx + $ix, $cy + $ix, $fill ); imageLine( $img, $cx + $ix, $cy - $iy + 1, $cx + $ix, $cy - $ix, $fill ); imageLine( $img, $cx - $ix, $cy + $iy - 1, $cx - $ix, $cy + $ix, $fill ); imageLine( $img, $cx - $ix, $cy - $iy + 1, $cx - $ix, $cy - $ix, $fill ); imageLine( $img, $cx + $iy - 1, $cy + $ix, $cx + $ix, $cy + $ix, $fill ); imageLine( $img, $cx + $iy - 1, $cy - $ix, $cx + $ix, $cy - $ix, $fill ); imageLine( $img, $cx - $iy + 1, $cy + $ix, $cx - $ix, $cy + $ix, $fill ); imageLine( $img, $cx - $iy + 1, $cy - $ix, $cx - $ix, $cy - $ix, $fill ); $filled = 0; for ( $xx = $ix - 0.45; $xx < $ix + 0.5; $xx += 0.2 ) { for ( $yy = $iy - 0.45; $yy < $iy + 0.5; $yy += 0.2 ) { if ( sqrt( pow( $xx, 2 ) + pow( $yy, 2 ) ) < $cr ) $filled += 4; } } $draw = imageColorExactAlpha( $img, $color[ 'R' ], $color[ 'G' ], $color[ 'B' ], ( 100 - $filled ) ); imageSetPixel( $img, $cx + $ix, $cy + $iy, $draw ); imageSetPixel( $img, $cx + $ix, $cy - $iy, $draw ); imageSetPixel( $img, $cx - $ix, $cy + $iy, $draw ); imageSetPixel( $img, $cx - $ix, $cy - $iy, $draw ); imageSetPixel( $img, $cx + $iy, $cy + $ix, $draw ); imageSetPixel( $img, $cx + $iy, $cy - $ix, $draw ); imageSetPixel( $img, $cx - $iy, $cy + $ix, $draw ); imageSetPixel( $img, $cx - $iy, $cy - $ix, $draw ); } }$strTestStringDescenders = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!£$%^&*()-=[];'#,./_+{}:@~<>?\|¬¦`";$strTestStringNoDescenders = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefhiklmnostuvwxz1234567890";$arrayTotalSize = imageTTFBBox($intFontSize, 0, $strFont, $strTestStringDescenders);$FontHeight = abs($arrayTotalSize[7]-$arrayTotalSize[1]);$TotalHeight = $FontHeight * Count($arrayMenuItems['Item Name']);$arrayTotalSize = imageTTFBBox($intFontSize, 0, $strFont, $strTestStringNoDescenders);$FontBase = abs($arrayTotalSize[7]-$arrayTotalSize[1]);$TotalWidth = 0;for ($i = 0; $i < Count($arrayMenuItems['Item Name']); $i++){ $arrayTotalSize = imageTTFBBox($intFontSize, 0, $strFont, $arrayMenuItems['Item Name'][$i]); if (abs($arrayTotalSize[2]-$arrayTotalSize[0]) > $TotalWidth) { $TotalWidth = abs($arrayTotalSize[2]-$arrayTotalSize[0]); } }$ImageSize = 2 * ceil(sqrt(($TotalHeight*$TotalHeight)/4 + ($TotalWidth*$TotalWidth)/4));$image = imageCreateTrueColor($ImageSize, $ImageSize);imageSaveAlpha($image, true);ImageAlphaBlending($image, false); $colorTransparent = imagecolorallocatealpha($image, 0, 0, 0, 127);$colorBadge = imagecolorallocate($image, 255, 51, 51);$colorText = imagecolorallocate($image, 255, 255, 255);imagefill($image, 0, 0, $colorTransparent);imagefilledellipse($image, ($ImageSize/2), ($ImageSize/2), ($ImageSize-1), ($ImageSize-1), $colorBadge);//imageSmoothCircle( $image, ($ImageSize/2), ($ImageSize/2), ($ImageSize/2)-1, array( 'R' => 0xFF, 'G' => 0x33, 'B' => 0x33 ) );echo "<map name=\"navigation\">";for ($i = 0; $i < Count($arrayMenuItems['Item Name']); $i++){ $arrayTextSize = imageTTFBBox($intFontSize, 0, $strFont, $arrayMenuItems['Item Name'][$i]); $radAngleRotation = deg2rad($intAngleRotation); $xOffset = ($ImageSize - abs($arrayTextSize[2]-$arrayTextSize[0]))/2; $yOffset = ($ImageSize - $TotalHeight)/2 + $FontBase + $i*$FontHeight; $xRotatedOffset = ($ImageSize/2) + (cos($radAngleRotation) * ($xOffset-($ImageSize/2))) - (sin($radAngleRotation) * (($ImageSize/2)-$yOffset)); $yRotatedOffset = ($ImageSize/2) - (sin($radAngleRotation) * ($xOffset-($ImageSize/2))) - (cos($radAngleRotation) * (($ImageSize/2)-$yOffset)); $arrayTextSize = imagettftext($image, $intFontSize, $intAngleRotation, $xRotatedOffset, $yRotatedOffset, $colorText, $strFont, $arrayMenuItems['Item Name'][$i]); $arrayMenuItems['Lower Left X'][$i] = $arrayTextSize[0]; $arrayMenuItems['Lower Left Y'][$i] = $arrayTextSize[1]; $arrayMenuItems['Lower Right X'][$i] = $arrayTextSize[2]; $arrayMenuItems['Lower Right Y'][$i] = $arrayTextSize[3]; $arrayMenuItems['Upper Right X'][$i] = $arrayTextSize[4]; $arrayMenuItems['Upper Right Y'][$i] = $arrayTextSize[5]; $arrayMenuItems['Upper Left X'][$i] = $arrayTextSize[6]; $arrayMenuItems['Upper Left Y'][$i] = $arrayTextSize[7]; echo "<area shape=\"poly\" coords=\""; echo $arrayMenuItems['Lower Left X'][$i]; echo ","; echo $arrayMenuItems['Lower Left Y'][$i]; echo ","; echo $arrayMenuItems['Lower Right X'][$i]; echo ","; echo $arrayMenuItems['Lower Right Y'][$i]; echo ","; echo $arrayMenuItems['Upper Right X'][$i]; echo ","; echo $arrayMenuItems['Upper Right Y'][$i]; echo ","; echo $arrayMenuItems['Upper Left X'][$i]; echo ","; echo $arrayMenuItems['Upper Left Y'][$i]; echo "\" href=\""; echo $arrayMenuItems['Item Link'][$i]; echo "\" alt=\"\">"; }echo "</map>";// create an interlaced image for better loading in the browserimageInterlace($image, 1);//header("Content-type: image/png");imagePNG($image, "assets/navigation.png");imagedestroy($image);$strUserAgent = $_SERVER['HTTP_USER_AGENT'];if (strpos($strUserAgent, "MSIE 6") OR strpos($strUserAgent, "MSIE 5.5")) { echo "<img src=\"assets\\spacer.gif\" width=\"".$ImageSize."\" height=\"".$ImageSize."\" style=\"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader( src='assets/navigation.png', sizingMethod='image');\" alt=\"\" usemap=\"#navigation\" ismap border=\"0\" />";} else { echo "<img src=\"assets\\navigation.png\" alt=\"\" usemap=\"#navigation\" ismap border=\"0\" />";}?>[/code]the transparency seems to work nicely at the edges...but not where letters collide....can anyone help me figure out whats happening???maybe my config is wrong [a href=\"http://g.is-a-geek.com/phpinfo.php\" target=\"_blank\"]http://g.is-a-geek.com/phpinfo.php[/a] Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.