<?php
function
ImageCode(
$string
=
''
,
$width
=75,
$height
=25){
$authstr
=
$string
?
$string
:((time()%2==0)?mt_rand(1000,9999):mt_rand(10000,99999));
$board_width
=
$width
;
$board_height
=
$height
;
for
(
$i
=0;
$i
<32;
$i
++){
ob_start();
$image
=imagecreate(
$board_width
,
$board_height
);
imagecolorallocate(
$image
,0,0,0);
$colorList
[]=ImageColorAllocate(
$image
,15,73,210);
$colorList
[]=ImageColorAllocate(
$image
,0,64,0);
$colorList
[]=ImageColorAllocate(
$image
,0,0,64);
$colorList
[]=ImageColorAllocate(
$image
,0,128,128);
$colorList
[]=ImageColorAllocate(
$image
,27,52,47);
$colorList
[]=ImageColorAllocate(
$image
,51,0,102);
$colorList
[]=ImageColorAllocate(
$image
,0,0,145);
$colorList
[]=ImageColorAllocate(
$image
,0,0,113);
$colorList
[]=ImageColorAllocate(
$image
,0,51,51);
$colorList
[]=ImageColorAllocate(
$image
,158,180,35);
$colorList
[]=ImageColorAllocate(
$image
,59,59,59);
$colorList
[]=ImageColorAllocate(
$image
,0,0,0);
$colorList
[]=ImageColorAllocate(
$image
,1,128,180);
$colorList
[]=ImageColorAllocate(
$image
,0,153,51);
$colorList
[]=ImageColorAllocate(
$image
,60,131,1);
$colorList
[]=ImageColorAllocate(
$image
,0,0,0);
$fontcolor
=ImageColorAllocate(
$image
,0,0,0);
$gray
=ImageColorAllocate(
$image
,245,245,245);
$color
=imagecolorallocate(
$image
,255,255,255);
$color2
=imagecolorallocate(
$image
,255,0,0);
imagefill(
$image
,0,0,
$gray
);
$space
=15;
if
(
$i
>0){
$top
=0;
for
(
$k
=0;
$k
<
strlen
(
$authstr
);
$k
++){
$colorRandom
=mt_rand(0,sizeof(
$colorList
)-1);
$float_top
=rand(0,4);
$float_left
=rand(0,3);
imagestring(
$image
,6,
$space
*
$k
,
$top
+
$float_top
,
substr
(
$authstr
,
$k
,1),
$colorList
[
$colorRandom
]);
}
}
for
(
$k
=0;
$k
<20;
$k
++){
$colorRandom
=mt_rand(0,sizeof(
$colorList
)-1);
imagesetpixel(
$image
,rand()%70,rand()%15,
$colorList
[
$colorRandom
]);
}
for
(
$k
=0;
$k
<3;
$k
++){
$colorRandom
=mt_rand(0,sizeof(
$colorList
)-1);
$todrawline
=1;
if
(
$todrawline
){
imageline(
$image
,mt_rand(0,
$board_width
),mt_rand(0,
$board_height
),mt_rand(0,
$board_width
),mt_rand(0,
$board_height
),
$colorList
[
$colorRandom
]);
}
else
{
$w
=mt_rand(0,
$board_width
);
$h
=mt_rand(0,
$board_width
);
imagearc(
$image
,
$board_width
-
floor
(
$w
/ 2),
floor
(
$h
/ 2),
$w
,
$h
, rand(90,180),rand(180,270),
$colorList
[
$colorRandom
]);
}
}
imagegif(
$image
);
imagedestroy(
$image
);
$imagedata
[]=ob_get_contents();
ob_clean();
++
$i
;
}
$gif
=
new
GIFEncoder(
$imagedata
);
Header(
'Content-type:image/gif'
);
echo
$gif
->GetAnimation();
}
Class GIFEncoder{
var
$GIF
=
"GIF89a"
;
var
$VER
=
"GIFEncoder V2.06"
;
var
$BUF
=Array();
var
$LOP
=0;
var
$DIS
=2;
var
$COL
=-1;
var
$IMG
=-1;
var
$ERR
=Array(
'ERR00'
=>
"Does not supported function for only one image!"
,
'ERR01'
=>
"Source is not a GIF image!"
,
'ERR02'
=>
"Unintelligible flag "
,
'ERR03'
=>
"Could not make animation from animated GIF source"
,
);
function
GIFEncoder(
$GIF_src
,
$GIF_dly
=100,
$GIF_lop
=0,
$GIF_dis
=0,
$GIF_red
=0,
$GIF_grn
=0,
$GIF_blu
=0,
$GIF_mod
=
'bin'
){
if
(!
is_array
(
$GIF_src
)&&!
is_array
(
$GIF_tim
)){
printf(
"%s: %s"
,
$this
->VER,
$this
->ERR[
'ERR00'
]);
exit
(0);
}
$this
->LOP=(
$GIF_lop
>-1)?
$GIF_lop
:0;
$this
->DIS=(
$GIF_dis
>-1)?((
$GIF_dis
<3)?
$GIF_dis
:3):2;
$this
->COL=(
$GIF_red
>-1&&
$GIF_grn
>-1&&
$GIF_blu
>-1)?(
$GIF_red
|(
$GIF_grn
<<8)|(
$GIF_blu
<<16)):-1;
for
(
$i
=0,
$src_count
=
count
(
$GIF_src
);
$i
<
$src_count
;
$i
++){
if
(
strToLower
(
$GIF_mod
)==
"url"
){
$this
->BUF[]=
fread
(
fopen
(
$GIF_src
[
$i
],
"rb"
),
filesize
(
$GIF_src
[
$i
]));
}
elseif
(
strToLower
(
$GIF_mod
)==
"bin"
){
$this
->BUF [ ]=
$GIF_src
[
$i
];
}
else
{
printf(
"%s: %s(%s)!"
,
$this
->VER,
$this
->ERR [
'ERR02'
],
$GIF_mod
);
exit
(0);
}
if
(
substr
(
$this
->BUF[
$i
],0,6)!=
"GIF87a"
&&
substr
(
$this
->BUF [
$i
],0,6)!=
"GIF89a"
){
printf(
"%s: %d %s"
,
$this
->VER,
$i
,
$this
->ERR [
'ERR01'
]);
exit
(0);
}
for
(
$j
=(13+3*(2<<(ord(
$this
->BUF[
$i
]{10})&0x07))),
$k
=TRUE;
$k
;
$j
++){
switch
(
$this
->BUF [
$i
]{
$j
}){
case
"!"
:
if
((
substr
(
$this
->BUF[
$i
],(
$j
+3),8))==
"NETSCAPE"
){
printf(
"%s: %s(%s source)!"
,
$this
->VER,
$this
->ERR [
'ERR03'
],(
$i
+1));
exit
(0);
}
break
;
case
";"
:
$k
=FALSE;
break
;
}
}
}
GIFEncoder::GIFAddHeader();
for
(
$i
=0,
$count_buf
=
count
(
$this
->BUF);
$i
<
$count_buf
;
$i
++){
GIFEncoder::GIFAddFrames(
$i
,
$GIF_dly
[
$i
]);
}
GIFEncoder::GIFAddFooter();
}
function
GIFAddHeader(){
$cmap
=0;
if
(ord(
$this
->BUF[0]{10})&0x80){
$cmap
=3*(2<<(ord(
$this
->BUF [0]{10})&0x07));
$this
->GIF.=
substr
(
$this
->BUF [0],6,7);
$this
->GIF.=
substr
(
$this
->BUF [0],13,
$cmap
);
$this
->GIF.=
"!\377\13NETSCAPE2.0\3\1"
.GIFEncoder::GIFWord(
$this
->LOP).
"\0"
;
}
}
function
GIFAddFrames(
$i
,
$d
){
$Locals_str
=13+3*(2 <<(ord(
$this
->BUF[
$i
]{10})&0x07));
$Locals_end
=
strlen
(
$this
->BUF[
$i
])-
$Locals_str
-1;
$Locals_tmp
=
substr
(
$this
->BUF[
$i
],
$Locals_str
,
$Locals_end
);
$Global_len
=2<<(ord(
$this
->BUF [0]{10})&0x07);
$Locals_len
=2<<(ord(
$this
->BUF[
$i
]{10})&0x07);
$Global_rgb
=
substr
(
$this
->BUF[0],13,3*(2<<(ord(
$this
->BUF[0]{10})&0x07)));
$Locals_rgb
=
substr
(
$this
->BUF[
$i
],13,3*(2<<(ord(
$this
->BUF[
$i
]{10})&0x07)));
$Locals_ext
=
"!\xF9\x04"
.
chr
((
$this
->DIS<<2)+0).
chr
((
$d
>>0)&0xFF).
chr
((
$d
>>8)&0xFF).
"\x0\x0"
;
if
(
$this
->COL>-1&&ord(
$this
->BUF[
$i
]{10})&0x80){
for
(
$j
=0;
$j
<(2<<(ord(
$this
->BUF[
$i
]{10})&0x07));
$j
++){
if
(ord(
$Locals_rgb
{3*
$j
+0})==(
$this
->COL>> 0)&0xFF&&ord(
$Locals_rgb
{3*
$j
+1})==(
$this
->COL>> 8)&0xFF&&ord(
$Locals_rgb
{3*
$j
+2})==(
$this
->COL>>16)&0xFF){
$Locals_ext
=
"!\xF9\x04"
.
chr
((
$this
->DIS<<2)+1).
chr
((
$d
>>0)&0xFF).
chr
((
$d
>>8)&0xFF).
chr
(
$j
).
"\x0"
;
break
;
}
}
}
switch
(
$Locals_tmp
{0}){
case
"!"
:
$Locals_img
=
substr
(
$Locals_tmp
,8,10);
$Locals_tmp
=
substr
(
$Locals_tmp
,18,
strlen
(
$Locals_tmp
)-18);
break
;
case
","
:
$Locals_img
=
substr
(
$Locals_tmp
,0,10);
$Locals_tmp
=
substr
(
$Locals_tmp
,10,
strlen
(
$Locals_tmp
)-10);
break
;
}
if
(ord(
$this
->BUF[
$i
]{10})&0x80&&
$this
->IMG>-1){
if
(
$Global_len
==
$Locals_len
){
if
(GIFEncoder::GIFBlockCompare(
$Global_rgb
,
$Locals_rgb
,
$Global_len
)){
$this
->GIF.=(
$Locals_ext
.
$Locals_img
.
$Locals_tmp
);
}
else
{
$byte
=ord(
$Locals_img
{9});
$byte
|=0x80;
$byte
&=0xF8;
$byte
|=(ord(
$this
->BUF [0]{10})&0x07);
$Locals_img
{9}=
chr
(
$byte
);
$this
->GIF.=(
$Locals_ext
.
$Locals_img
.
$Locals_rgb
.
$Locals_tmp
);
}
}
else
{
$byte
=ord(
$Locals_img
{9});
$byte
|=0x80;
$byte
&=0xF8;
$byte
|=(ord(
$this
->BUF[
$i
]{10})&0x07);
$Locals_img
{9}=
chr
(
$byte
);
$this
->GIF.=(
$Locals_ext
.
$Locals_img
.
$Locals_rgb
.
$Locals_tmp
);
}
}
else
{
$this
->GIF.=(
$Locals_ext
.
$Locals_img
.
$Locals_tmp
);
}
$this
->IMG=1;
}
function
GIFAddFooter(){
$this
->GIF.=
";"
;
}
function
GIFBlockCompare(
$GlobalBlock
,
$LocalBlock
,
$Len
){
for
(
$i
=0;
$i
<
$Len
;
$i
++){
if
(
$GlobalBlock
{3*
$i
+0}!=
$LocalBlock
{3*
$i
+0}||
$GlobalBlock
{3*
$i
+1}!=
$LocalBlock
{3*
$i
+1}||
$GlobalBlock
{3*
$i
+2}!=
$LocalBlock
{3*
$i
+2}){
return
(0);
}
}
return
(1);
}
function
GIFWord(
$int
){
return
(
chr
(
$int
&0xFF).
chr
((
$int
>>8)&0xFF));
}
function
GetAnimation(){
return
(
$this
->GIF);
}
}