- /*
- * 중국 원형 인감 카테고리
- * @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; //내부 원 반경
- //Pentagram 반경;
- private $startAngle; //오각형 기울기 각도
- private $backGround; //씰 색상
- private $centerDot; //원 중심 좌표
- //그래픽 리소스 핸들
- private $font; //지정된 글꼴
- private $width; //그림 너비
- private $points; /Pentagram 각 점의 좌표
- private $charRadius; //문자열 반경
- private $charAngle; //문자열 기울기 각도
- private $spacing; //문자 간격 각도
-
- //구성 메소드
- 공개 함수 __construct($str ='', $rad = 75, $rmwidth = 6, $strad = 24, $stang = 0, $crang = 0, $fsize = 16, $inrad =0){
- $this->sealString = 비어 있음($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);
- }
-
- //인감 테두리 그리기
- 비공개 함수 drawRim(){
- for($i=0;$i<$this->rimWidth;$i ){
- imagearc($this->img,$this->centerDot['x' ] ,$this->centerDot['y'],$this->너비 - $i,$this->높이 - $i,0,360,$this->backGround);
- }
- }
-
- //내부 원 그리기
- 비공개 함수 drawInnerCircle(){
- imagearc($this->img,$this->centerDot['x'],$this- > centerDot['y'],2*$this->innerRadius,2*$this->innerRadius,0,360,$this->backGround);
- }
-
- //그리기 문자열
- 비공개 함수 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]);
- }
- }
-
- //画五角星
- 비공개 함수 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);
- }
-
- //输出
- 비공개 함수 outPut(){
- header('Content-type:image/png');
- imagepng($this->img);
- imagedestroy($this->img);
- }
-
- //외생성
- 공용 함수 doImg(){
- $this->createImg();
- $this->drawRim();
- $this->drawInnerCircle() ;
- $this->drawString();
- $this->drawStart();
- $this->outPut();
- }
- }
-
제조대码
|