<?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)
{
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);
}
}