方法一:
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
<?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 $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(); } } |
方法二:
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 @ $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:\WINDOWS\Fonts\simkai.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 ); ?> |
以上所述就是本文的全部内容了,希望大家能够喜欢