*CRLF fix. By Paradox.
--HG-- branch : trunk
This commit is contained in:
@@ -1,231 +1,231 @@
|
||||
<?php
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFEncoder Version 2.0 by László Zsidi, http://gifs.hu
|
||||
::
|
||||
:: This class is a rewritten 'GifMerge.class.php' version.
|
||||
::
|
||||
:: Modification:
|
||||
:: - Simplified and easy code,
|
||||
:: - Ultra fast encoding,
|
||||
:: - Built-in errors,
|
||||
:: - Stable working
|
||||
::
|
||||
::
|
||||
:: Updated at 2007. 02. 13. '00.05.AM'
|
||||
::
|
||||
*/
|
||||
Class GIFEncoder {
|
||||
var $GIF = "GIF89a"; /* GIF header 6 bytes */
|
||||
var $VER = "GIFEncoder V2.06"; /* Encoder version */
|
||||
|
||||
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",
|
||||
);
|
||||
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFEncoder...
|
||||
::
|
||||
*/
|
||||
function GIFEncoder (
|
||||
$GIF_src, $GIF_dly, $GIF_lop, $GIF_dis,
|
||||
$GIF_red, $GIF_grn, $GIF_blu, $GIF_mod
|
||||
) {
|
||||
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; $i < count ( $GIF_src ); $i++ ) {
|
||||
if ( strToLower ( $GIF_mod ) == "url" ) {
|
||||
$this->BUF [ ] = fread ( fopen ( $GIF_src [ $i ], "rb" ), filesize ( $GIF_src [ $i ] ) );
|
||||
}
|
||||
else if ( 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; $i < count ( $this->BUF ); $i++ ) {
|
||||
GIFEncoder::GIFAddFrames ( $i, $GIF_dly [ $i ] );
|
||||
}
|
||||
GIFEncoder::GIFAddFooter ( );
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFAddHeader...
|
||||
::
|
||||
*/
|
||||
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";
|
||||
}
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFAddFrames...
|
||||
::
|
||||
*/
|
||||
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;
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFAddFooter...
|
||||
::
|
||||
*/
|
||||
function GIFAddFooter ( ) {
|
||||
$this->GIF .= ";";
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFBlockCompare...
|
||||
::
|
||||
*/
|
||||
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 );
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFWord...
|
||||
::
|
||||
*/
|
||||
function GIFWord ( $int ) {
|
||||
|
||||
return ( chr ( $int & 0xFF ) . chr ( ( $int >> 8 ) & 0xFF ) );
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GetAnimation...
|
||||
::
|
||||
*/
|
||||
function GetAnimation ( ) {
|
||||
return ( $this->GIF );
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFEncoder Version 2.0 by László Zsidi, http://gifs.hu
|
||||
::
|
||||
:: This class is a rewritten 'GifMerge.class.php' version.
|
||||
::
|
||||
:: Modification:
|
||||
:: - Simplified and easy code,
|
||||
:: - Ultra fast encoding,
|
||||
:: - Built-in errors,
|
||||
:: - Stable working
|
||||
::
|
||||
::
|
||||
:: Updated at 2007. 02. 13. '00.05.AM'
|
||||
::
|
||||
*/
|
||||
Class GIFEncoder {
|
||||
var $GIF = "GIF89a"; /* GIF header 6 bytes */
|
||||
var $VER = "GIFEncoder V2.06"; /* Encoder version */
|
||||
|
||||
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",
|
||||
);
|
||||
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFEncoder...
|
||||
::
|
||||
*/
|
||||
function GIFEncoder (
|
||||
$GIF_src, $GIF_dly, $GIF_lop, $GIF_dis,
|
||||
$GIF_red, $GIF_grn, $GIF_blu, $GIF_mod
|
||||
) {
|
||||
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; $i < count ( $GIF_src ); $i++ ) {
|
||||
if ( strToLower ( $GIF_mod ) == "url" ) {
|
||||
$this->BUF [ ] = fread ( fopen ( $GIF_src [ $i ], "rb" ), filesize ( $GIF_src [ $i ] ) );
|
||||
}
|
||||
else if ( 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; $i < count ( $this->BUF ); $i++ ) {
|
||||
GIFEncoder::GIFAddFrames ( $i, $GIF_dly [ $i ] );
|
||||
}
|
||||
GIFEncoder::GIFAddFooter ( );
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFAddHeader...
|
||||
::
|
||||
*/
|
||||
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";
|
||||
}
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFAddFrames...
|
||||
::
|
||||
*/
|
||||
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;
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFAddFooter...
|
||||
::
|
||||
*/
|
||||
function GIFAddFooter ( ) {
|
||||
$this->GIF .= ";";
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFBlockCompare...
|
||||
::
|
||||
*/
|
||||
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 );
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GIFWord...
|
||||
::
|
||||
*/
|
||||
function GIFWord ( $int ) {
|
||||
|
||||
return ( chr ( $int & 0xFF ) . chr ( ( $int >> 8 ) & 0xFF ) );
|
||||
}
|
||||
/*
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
:: GetAnimation...
|
||||
::
|
||||
*/
|
||||
function GetAnimation ( ) {
|
||||
return ( $this->GIF );
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1,82 +1,82 @@
|
||||
<?
|
||||
session_start( );
|
||||
/**
|
||||
@package AnimatedCaptcha
|
||||
@author J Watkins <[email protected]>
|
||||
@desc OOP Interface to AnimCaptcha ( PHP 5 )
|
||||
@static
|
||||
**/
|
||||
class AnimCaptcha
|
||||
{
|
||||
static $frames ;
|
||||
static $time ;
|
||||
static $num ;
|
||||
static $pause ;
|
||||
static $ops ;
|
||||
static $gifs ;
|
||||
static $rand ;
|
||||
static $math ;
|
||||
|
||||
function AnimCaptcha( $gifs, $pause )
|
||||
{
|
||||
if( !class_exists( 'GIFEncoder' ) and !include('GIFEncoder.class.php') )
|
||||
die( 'I require GIFEncoder to be loaded before operation' );
|
||||
|
||||
self::$pause = (int)$pause ;
|
||||
self::$gifs = $gifs ;
|
||||
self::$ops = array
|
||||
(
|
||||
'minus',
|
||||
'plus',
|
||||
'times'
|
||||
);
|
||||
self::$math = array
|
||||
(
|
||||
'-',
|
||||
'+',
|
||||
'*'
|
||||
);
|
||||
|
||||
self::$num['rand1'] = rand( 1, 9 );
|
||||
self::$num['rand2'] = rand( 1, 9 );
|
||||
self::$num['op'] = rand( 0, count( self::$math ) - 1 );
|
||||
|
||||
self::BuildImage( );
|
||||
}
|
||||
function BuildImage( )
|
||||
{
|
||||
self::$frames[ ] = sprintf( '%s/solve.gif', self::$gifs ) ;
|
||||
self::$time[ ] = 260;
|
||||
self::$frames[ ] = sprintf( '%s/%d.gif', self::$gifs, self::$num['rand1'] );
|
||||
self::$time[ ] = self::$pause;
|
||||
self::$frames[ ] = sprintf( '%s/%s.gif', self::$gifs, self::$ops[ self::$num['op'] ] );
|
||||
self::$time[ ] = self::$pause;
|
||||
self::$frames[ ] = sprintf( '%s/%d.gif', self::$gifs, self::$num['rand2'] );
|
||||
self::$time[ ] = self::$pause;
|
||||
self::$frames[ ] = "frames/equals.gif" ;
|
||||
self::$time [ ] = 280;
|
||||
foreach( self::$num as $index => $value ) $_SESSION[ $index ] = self::$num[ $value ];
|
||||
}
|
||||
function GetImage( )
|
||||
{
|
||||
eval( sprintf( '$_SESSION["answer"] = (%d %s %d);',
|
||||
self::$num['rand1'],
|
||||
self::$math[ self::$num['op'] ],
|
||||
self::$num['rand2']
|
||||
) );
|
||||
|
||||
if( $_SESSION['answer'] < 0 )
|
||||
self::AnimCaptcha( self::$gifs, self::$pause );
|
||||
|
||||
$gif = new GIFEncoder( self::$frames, self::$time, 0, 2, 0, 0, 0, "url" );
|
||||
|
||||
if( !headers_sent( ) )
|
||||
{
|
||||
header ( 'Content-type:image/gif' );
|
||||
echo $gif->GetAnimation ( );
|
||||
}
|
||||
}
|
||||
}
|
||||
new AnimCaptcha( 'frames', 140 );
|
||||
AnimCaptcha::GetImage( );
|
||||
?>
|
||||
<?
|
||||
session_start( );
|
||||
/**
|
||||
@package AnimatedCaptcha
|
||||
@author J Watkins <[email protected]>
|
||||
@desc OOP Interface to AnimCaptcha ( PHP 5 )
|
||||
@static
|
||||
**/
|
||||
class AnimCaptcha
|
||||
{
|
||||
static $frames ;
|
||||
static $time ;
|
||||
static $num ;
|
||||
static $pause ;
|
||||
static $ops ;
|
||||
static $gifs ;
|
||||
static $rand ;
|
||||
static $math ;
|
||||
|
||||
function AnimCaptcha( $gifs, $pause )
|
||||
{
|
||||
if( !class_exists( 'GIFEncoder' ) and !include('GIFEncoder.class.php') )
|
||||
die( 'I require GIFEncoder to be loaded before operation' );
|
||||
|
||||
self::$pause = (int)$pause ;
|
||||
self::$gifs = $gifs ;
|
||||
self::$ops = array
|
||||
(
|
||||
'minus',
|
||||
'plus',
|
||||
'times'
|
||||
);
|
||||
self::$math = array
|
||||
(
|
||||
'-',
|
||||
'+',
|
||||
'*'
|
||||
);
|
||||
|
||||
self::$num['rand1'] = rand( 1, 9 );
|
||||
self::$num['rand2'] = rand( 1, 9 );
|
||||
self::$num['op'] = rand( 0, count( self::$math ) - 1 );
|
||||
|
||||
self::BuildImage( );
|
||||
}
|
||||
function BuildImage( )
|
||||
{
|
||||
self::$frames[ ] = sprintf( '%s/solve.gif', self::$gifs ) ;
|
||||
self::$time[ ] = 260;
|
||||
self::$frames[ ] = sprintf( '%s/%d.gif', self::$gifs, self::$num['rand1'] );
|
||||
self::$time[ ] = self::$pause;
|
||||
self::$frames[ ] = sprintf( '%s/%s.gif', self::$gifs, self::$ops[ self::$num['op'] ] );
|
||||
self::$time[ ] = self::$pause;
|
||||
self::$frames[ ] = sprintf( '%s/%d.gif', self::$gifs, self::$num['rand2'] );
|
||||
self::$time[ ] = self::$pause;
|
||||
self::$frames[ ] = "frames/equals.gif" ;
|
||||
self::$time [ ] = 280;
|
||||
foreach( self::$num as $index => $value ) $_SESSION[ $index ] = self::$num[ $value ];
|
||||
}
|
||||
function GetImage( )
|
||||
{
|
||||
eval( sprintf( '$_SESSION["answer"] = (%d %s %d);',
|
||||
self::$num['rand1'],
|
||||
self::$math[ self::$num['op'] ],
|
||||
self::$num['rand2']
|
||||
) );
|
||||
|
||||
if( $_SESSION['answer'] < 0 )
|
||||
self::AnimCaptcha( self::$gifs, self::$pause );
|
||||
|
||||
$gif = new GIFEncoder( self::$frames, self::$time, 0, 2, 0, 0, 0, "url" );
|
||||
|
||||
if( !headers_sent( ) )
|
||||
{
|
||||
header ( 'Content-type:image/gif' );
|
||||
echo $gif->GetAnimation ( );
|
||||
}
|
||||
}
|
||||
}
|
||||
new AnimCaptcha( 'frames', 140 );
|
||||
AnimCaptcha::GetImage( );
|
||||
?>
|
||||
|
||||
@@ -1,112 +1,112 @@
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
/*
|
||||
AnimCaptcha v1.3 >> 6-13-07
|
||||
|
||||
This Animated Gif Captcha system is brought to you courtesy of ...
|
||||
[email protected] ==> Josh Storz
|
||||
http://www.querythe.net/Animated-Gif-Captcha/ ==> Download Current Version
|
||||
|
||||
OOP (PHP 4 & 5) Interface by ...
|
||||
[email protected] ==> J Watkins
|
||||
|
||||
The GIFEncoder class was written by ...
|
||||
http://gifs.hu ==> László Zsidi
|
||||
http://www.phpclasses.org/browse/package/3163.html ==> Download Current Version
|
||||
|
||||
This file is part of QueryThe.Net's AnimatedCaptcha Package.
|
||||
|
||||
QueryThe.Net's AnimatedCaptcha is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
QueryThe.Net's AnimatedCaptcha is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with QueryThe.Net's AnimatedCaptcha; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
include "GIFEncoder.class.php";
|
||||
|
||||
function add_random_frames($frame) {
|
||||
// random number & elapsed time of frames to *hopefully* make a cracker's life tougher
|
||||
|
||||
global $frames ;
|
||||
global $time ;
|
||||
|
||||
$i = 0;
|
||||
$loop = rand(6, 14); // total number of frames in loop loop
|
||||
|
||||
while ($i < $loop)
|
||||
{
|
||||
$frames [ ] = "frames/$frame.gif"; // use the solve frame so that the human eye cannot see a flicker
|
||||
$time [ ] = rand(15, 25); // 5 * 20 = 1 second so the delay is never too terribly long
|
||||
$i ++ ;
|
||||
}
|
||||
}
|
||||
|
||||
// get random numbers & operator and make sure the answer is >= 0
|
||||
$k = 0 ;
|
||||
while($k == 0)
|
||||
{
|
||||
$rand1 = rand(1, 9); // 1st number (1-9)
|
||||
$rand3 = rand(1, 9); // 2nd number (1-9)
|
||||
$rand2 = rand(0, 2); // operator (-,+,*)
|
||||
|
||||
if (($rand2 != 0) || ($rand3 < $rand1)) $k = 1 ;
|
||||
}
|
||||
|
||||
// set sessions for numbers, operator & answer. Only $_SESSION['answer'] is necessary. Others are for displaying full equation if you desire.
|
||||
$_SESSION['r1'] = $rand1 ;
|
||||
$_SESSION['r3'] = $rand3 ;
|
||||
|
||||
if ($rand2 == 0) {$_SESSION['r2'] = " - " ; $_SESSION['answer'] = $rand1 - $rand3 ; $frame_operator = "minus" ;}
|
||||
elseif ($rand2 == 1) {$_SESSION['r2'] = " + " ; $_SESSION['answer'] = $rand1 + $rand3 ; $frame_operator = "plus" ;}
|
||||
else {$_SESSION['r2'] = " * " ; $_SESSION['answer'] = $rand1 * $rand3 ; $frame_operator = "times" ;}
|
||||
|
||||
// build the frame images and elapsed time to show in 2 arrays
|
||||
$frames [ ] = "frames/solve.gif" ; // Intro message " Prove you are human ... "
|
||||
$time [ ] = 140;
|
||||
add_random_frames('solve') ;
|
||||
|
||||
// set 1st random number
|
||||
$frames [ ] = "frames/" .$rand1. ".gif"; // 1st number (0-9)
|
||||
$time [ ] = 35;
|
||||
add_random_frames($rand1) ;
|
||||
|
||||
// set frame for operator
|
||||
$frames [ ] = "frames/" .$frame_operator. ".gif" ;
|
||||
$time [ ] = 60;
|
||||
add_random_frames($frame_operator) ;
|
||||
|
||||
// set 2nd random number
|
||||
$frames [ ] = "frames/" .$rand3. ".gif"; // 2nd number (0-9)
|
||||
$time [ ] = 35;
|
||||
add_random_frames($rand3) ;
|
||||
|
||||
|
||||
// set final frame for equals
|
||||
$frames [ ] = "frames/equals.gif" ; // Ending message " equals = "
|
||||
$time [ ] = 140; // equals frame time (100 = 1 second)
|
||||
add_random_frames('equals') ;
|
||||
|
||||
// encode the gif using the class to avoid gd dependencies
|
||||
$gif = new GIFEncoder (
|
||||
$frames, // frames array
|
||||
$time, // elapsed time array
|
||||
0, // loops (0 = infinite)
|
||||
2, // disposal
|
||||
0, 0, 0, // rgb of transparency
|
||||
"url" // source type
|
||||
);
|
||||
|
||||
// display the image
|
||||
Header ( 'Content-type:image/gif' );
|
||||
echo $gif->GetAnimation ( );
|
||||
|
||||
?>
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
/*
|
||||
AnimCaptcha v1.3 >> 6-13-07
|
||||
|
||||
This Animated Gif Captcha system is brought to you courtesy of ...
|
||||
[email protected] ==> Josh Storz
|
||||
http://www.querythe.net/Animated-Gif-Captcha/ ==> Download Current Version
|
||||
|
||||
OOP (PHP 4 & 5) Interface by ...
|
||||
[email protected] ==> J Watkins
|
||||
|
||||
The GIFEncoder class was written by ...
|
||||
http://gifs.hu ==> László Zsidi
|
||||
http://www.phpclasses.org/browse/package/3163.html ==> Download Current Version
|
||||
|
||||
This file is part of QueryThe.Net's AnimatedCaptcha Package.
|
||||
|
||||
QueryThe.Net's AnimatedCaptcha is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
QueryThe.Net's AnimatedCaptcha is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with QueryThe.Net's AnimatedCaptcha; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
include "GIFEncoder.class.php";
|
||||
|
||||
function add_random_frames($frame) {
|
||||
// random number & elapsed time of frames to *hopefully* make a cracker's life tougher
|
||||
|
||||
global $frames ;
|
||||
global $time ;
|
||||
|
||||
$i = 0;
|
||||
$loop = rand(6, 14); // total number of frames in loop loop
|
||||
|
||||
while ($i < $loop)
|
||||
{
|
||||
$frames [ ] = "frames/$frame.gif"; // use the solve frame so that the human eye cannot see a flicker
|
||||
$time [ ] = rand(15, 25); // 5 * 20 = 1 second so the delay is never too terribly long
|
||||
$i ++ ;
|
||||
}
|
||||
}
|
||||
|
||||
// get random numbers & operator and make sure the answer is >= 0
|
||||
$k = 0 ;
|
||||
while($k == 0)
|
||||
{
|
||||
$rand1 = rand(1, 9); // 1st number (1-9)
|
||||
$rand3 = rand(1, 9); // 2nd number (1-9)
|
||||
$rand2 = rand(0, 2); // operator (-,+,*)
|
||||
|
||||
if (($rand2 != 0) || ($rand3 < $rand1)) $k = 1 ;
|
||||
}
|
||||
|
||||
// set sessions for numbers, operator & answer. Only $_SESSION['answer'] is necessary. Others are for displaying full equation if you desire.
|
||||
$_SESSION['r1'] = $rand1 ;
|
||||
$_SESSION['r3'] = $rand3 ;
|
||||
|
||||
if ($rand2 == 0) {$_SESSION['r2'] = " - " ; $_SESSION['answer'] = $rand1 - $rand3 ; $frame_operator = "minus" ;}
|
||||
elseif ($rand2 == 1) {$_SESSION['r2'] = " + " ; $_SESSION['answer'] = $rand1 + $rand3 ; $frame_operator = "plus" ;}
|
||||
else {$_SESSION['r2'] = " * " ; $_SESSION['answer'] = $rand1 * $rand3 ; $frame_operator = "times" ;}
|
||||
|
||||
// build the frame images and elapsed time to show in 2 arrays
|
||||
$frames [ ] = "frames/solve.gif" ; // Intro message " Prove you are human ... "
|
||||
$time [ ] = 140;
|
||||
add_random_frames('solve') ;
|
||||
|
||||
// set 1st random number
|
||||
$frames [ ] = "frames/" .$rand1. ".gif"; // 1st number (0-9)
|
||||
$time [ ] = 35;
|
||||
add_random_frames($rand1) ;
|
||||
|
||||
// set frame for operator
|
||||
$frames [ ] = "frames/" .$frame_operator. ".gif" ;
|
||||
$time [ ] = 60;
|
||||
add_random_frames($frame_operator) ;
|
||||
|
||||
// set 2nd random number
|
||||
$frames [ ] = "frames/" .$rand3. ".gif"; // 2nd number (0-9)
|
||||
$time [ ] = 35;
|
||||
add_random_frames($rand3) ;
|
||||
|
||||
|
||||
// set final frame for equals
|
||||
$frames [ ] = "frames/equals.gif" ; // Ending message " equals = "
|
||||
$time [ ] = 140; // equals frame time (100 = 1 second)
|
||||
add_random_frames('equals') ;
|
||||
|
||||
// encode the gif using the class to avoid gd dependencies
|
||||
$gif = new GIFEncoder (
|
||||
$frames, // frames array
|
||||
$time, // elapsed time array
|
||||
0, // loops (0 = infinite)
|
||||
2, // disposal
|
||||
0, 0, 0, // rgb of transparency
|
||||
"url" // source type
|
||||
);
|
||||
|
||||
// display the image
|
||||
Header ( 'Content-type:image/gif' );
|
||||
echo $gif->GetAnimation ( );
|
||||
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user