方法一:
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 );
?>
|
以上所述就是本文的全部内容了,希望大家能够喜欢