方法一:
<?php/* * 中文圆形印章类 * @author lkk/lianq.net * @create on 10:03 2012-5-29 * @example: * $seal = new circleSeal("你我他坐站走东西南北中",75,6,24,0,0,16,40); * $seal->doImg(); */ class circleSeal {private $sealString;//印章字符private $strMaxLeng;//最大字符长度private $sealRadius;//印章半径private $rimWidth; //边框厚度private $innerRadius;//内圆半径private $startRadius;//五角星半径private $startAngle;//五角星倾斜角度private $backGround;//印章颜色private $centerDot; //圆心坐标private $img;//图形资源句柄private $font; //指定的字体private $fontSize; //指定字体大小private $width; //图片宽度private $height;//图片高度private $points;//五角星各点坐标private $charRadius;//字符串半径private $charAngle; //字符串倾斜角度private $spacing;//字符间隔角度 //构造方法public function __construct($str ="", $rad = 75, $rmwidth = 6, $strad = 24, $stang = 0, $crang = 0, $fsize = 16, $inrad =0){$this->sealString= empty($str) ? "印章测试字符串" : $str;$this->strMaxLeng= 12;$this->sealRadius= $rad;$this->rimWidth = $rmwidth;$this->startRadius = $strad;$this->startAngle= $stang;$this->charAngle= $crang;$this->centerDot= array("x"=>$rad, "y"=>$rad);$this->font = dirname(__FILE__) ."/simkai.ttf";$this->fontSize = $fsize;$this->innerRadius = $inrad;//默认0,没有$this->spacing = 1;} //创建图片资源private function createImg(){$this->width= 2 * $this->sealRadius;$this->height= 2 * $this->sealRadius;$this->img = imagecreate($this->width, $this->height);imagecolorresolvealpha($this->img,255,255,255,127);$this->backGround= imagecolorallocate($this->img,255,0,0);} //画印章边框private function drawRim(){for($i=0;$i<$this->rimWidth;$i++){imagearc($this->img,$this->centerDot["x"],$this->centerDot["y"],$this->width - $i,$this->height - $i,0,360,$this->backGround);}} //画内圆private function drawInnerCircle(){imagearc($this->img,$this->centerDot["x"],$this->centerDot["y"],2*$this->innerRadius,2*$this->innerRadius,0,360,$this->backGround);} //画字符串private function drawString(){//编码处理$charset = mb_detect_encoding($this->sealString);if($charset != "UTF-8"){$this->sealString = mb_convert_encoding($this->sealString, "UTF-8", "GBK");} //相关计量$this->charRadius = $this->sealRadius - $this->rimWidth - $this->fontSize; //字符串半径$leng= mb_strlen($this->sealString,"utf8"); //字符串长度if($leng > $this->strMaxLeng) $leng = $this->strMaxLeng;$avgAngle= 360 / ($this->strMaxLeng);//平均字符倾斜度 //拆分并写入字符串$words = array(); //字符数组for($i=0;$i<$leng;$i++){$words[] = mb_substr($this->sealString,$i,1,"utf8");$r = 630 + $this->charAngle + $avgAngle*($i - $leng/2) + $this->spacing*($i-1); //坐标角度$R = 720 - $this->charAngle + $avgAngle*($leng-2*$i-1)/2 + $this->spacing*(1-$i);//字符角度$x = $this->centerDot["x"] + $this->charRadius * cos(deg2rad($r)); //字符的x坐标$y = $this->centerDot["y"] + $this->charRadius * sin(deg2rad($r)); //字符的y坐标imagettftext($this->img, $this->fontSize, $R, $x, $y, $this->backGround, $this->font, $words[$i]);}} //画五角星private function drawStart(){$ang_out = 18 + $this->startAngle;$ang_in = 56 + $this->startAngle;$rad_out = $this->startRadius;$rad_in = $rad_out * 0.382;for($i=0;$i<5;$i++){//五个顶点坐标$this->points[] = $rad_out * cos(2*M_PI/5*$i - deg2rad($ang_out)) + $this->centerDot["x"];$this->points[] = $rad_out * sin(2*M_PI/5*$i - deg2rad($ang_out)) + $this->centerDot["y"]; //内凹的点坐标$this->points[] = $rad_in * cos(2*M_PI/5*($i+1) - deg2rad($ang_in)) + $this->centerDot["x"];$this->points[] = $rad_in * sin(2*M_PI/5*($i+1) - deg2rad($ang_in)) + $this->centerDot["y"];}imagefilledpolygon($this->img, $this->points, 10, $this->backGround);} //输出private function outPut(){header("Content-type:image/png");imagepng($this->img);imagedestroy($this->img);} //对外生成public function doImg(){$this->createImg();$this->drawRim();$this->drawInnerCircle();$this->drawString();$this->drawStart();$this->outPut();}}方法二:
<?php@$hos=iconv("GBK", "UTF-8", $_GET["hos"]);if(!isset($hos))exit;$im=ImageCreate(150,150);$gray=ImageColorResolveAlpha($im,200,200,200,127);$red=ImageColorAllocate($im,230,150,150);for($i=0;$i<6;$i++)ImageArc($im,75,75,148-$i,148-$i,0,360,$red);$stock="C:WINDOWSFontssimkai.ttf";$point="★";$size=30;ImageTTFText($im,$size,0,72-$size/2,72+$size/2,$red,$stock,$point);$a=75;$b=-75;//中心点坐标$r=65;$m=40;//半径,角度$size=16;//字体大小$r=$r-$size;$word=array();$max=18;$count=mb_strlen($hos,"utf8");if($count>$max)$count=$max;if($count>12)$m=floor(360/$count);else if($count>5)$m-=$count;for($i=0;$i<$count;$i++)$word[]=mb_substr($hos,$i,1,"utf8");$j=floor($count/2);if($j!=$count/2){ for($i=$j;$i>=0;$i--) { $arc=$m*($j-$i)+$size/2; $x=round($r*cos((90+$arc)*M_PI/180))+$a; $y=-1*(round($r*sin((90+$arc)*M_PI/180))+$b); if($arc<10)$arc=0;ImageTTFText($im,$size,$arc,$x,$y,$red,$stock,$word[$i]); $arc=$m*($j-$i)-$size/2; $x=round($r*cos((90-$arc)*M_PI/180))+$a; $y=-1*(round($r*sin((90-$arc)*M_PI/180))+$b); if($arc<10)$arc=0;ImageTTFText($im,$size,-$arc,$x,$y,$red,$stock,$word[$j+$j-$i]); }}else{ $j=$j-1; for($i=$j;$i>=0;$i--) { $arc=$m/2+$m*($j-$i)+$size/2; $x=round($r*cos((90+$arc)*M_PI/180))+$a; $y=-1*(round($r*sin((90+$arc)*M_PI/180))+$b); ImageTTFText($im,$size,$arc,$x,$y,$red,$stock,$word[$i]);$arc=$m/2+$m*($j-$i)-$size/2; $x=round($r*cos((90-$arc)*M_PI/180))+$a; $y=-1*(round($r*sin((90-$arc)*M_PI/180))+$b); ImageTTFText($im,$size,-$arc,$x,$y,$red,$stock,$word[$j+$j+1-$i]); }}header("Content-Type:image/png");ImagePNG($im);?>以上所述就是本文的全部内容了,希望大家能够喜欢