方法一:
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
$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();
}
}
|
方法二:
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
);
?>
|