Вход Регистрация
Файл: sys/inc/gifdecoder.php
Строк: 90
<?php
/*
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
::    GIFDecoder Version 2.0 by László Zsidi, http://gifs.hu
::
::    Created at 2007. 02. 01. '07.47.AM'
::
::
::
::
::  Try on-line GIFBuilder Form demo based on GIFDecoder.
::
::  http://phpclasses.gifs.hu/demos/GifBuilder/
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*/
Class GIFDecoder
{
    var 
$GIF_buffer = Array( );
    var 
$GIF_arrays = Array( );
    var 
$GIF_delays = Array( );
    var 
$GIF_offset = Array( );
    var 
$GIF_stream "";
    var 
$GIF_string "";
    var 
$GIF_bfseek 0;
    var 
$GIF_screen = Array( );
    var 
$GIF_global = Array( );
    var 
$GIF_sorted;
    var 
$GIF_colorS;
    var 
$GIF_colorC;
    var 
$GIF_colorF;
    
/*
    :::::::::::::::::::::::::::::::::::::::::::::::::::
    ::
    ::    GIFDecoder ( $GIF_pointer )
    ::
    */
    
function GIFDecoder$GIF_pointer )
    {
        
$this->GIF_stream $GIF_pointer;
        
GIFDecoder::GIFGetByte); // GIF89a
        
GIFDecoder::GIFGetByte); // Logical Screen Descriptor
        
$this->GIF_screen $this->GIF_buffer;
        
$this->GIF_colorF $this->GIF_buffer[4] & 0x80 0;
        
$this->GIF_sorted $this->GIF_buffer[4] & 0x08 0;
        
$this->GIF_colorC $this->GIF_buffer[4] & 0x07;
        
$this->GIF_colorS << $this->GIF_colorC;
        if ( 
$this->GIF_colorF == ) {
            
GIFDecoder::GIFGetByte$this->GIF_colorS );
            
$this->GIF_global $this->GIF_buffer;
        }
        
/*
         *
         *  05.06.2007.
         *  Made a little modification
         *
         *
         -    for ( $cycle = 1; $cycle; ) {
         +        if ( GIFDecoder::GIFGetByte ( 1 ) ) {
         -            switch ( $this->GIF_buffer [ 0 ] ) {
         -                case 0x21:
         -                    GIFDecoder::GIFReadExtensions ( );
         -                    break;
         -                case 0x2C:
         -                    GIFDecoder::GIFReadDescriptor ( );
         -                    break;
         -                case 0x3B:
         -                    $cycle = 0;
         -                    break;
         -              }
         -        }
         +        else {
         +            $cycle = 0;
         +        }
         -    }
         */
        
for ( $cycle 1$cycle; ) {
            if ( 
GIFDecoder::GIFGetByte) ) {
                switch ( 
$this->GIF_buffer[0] ) {
                    case 
0x21:
                        
GIFDecoder::GIFReadExtensions();
                        break;
                    case 
0x2C:
                        
GIFDecoder::GIFReadDescriptor();
                        break;
                    case 
0x3B:
                        
$cycle 0;
                        break;
                }
            } else {
                
$cycle 0;
            }
        }
    }
    
/*
    :::::::::::::::::::::::::::::::::::::::::::::::::::
    ::
    ::    GIFReadExtension ( )
    ::
    */
    
function GIFReadExtensions( )
    {
        
GIFDecoder::GIFGetByte);
        for ( ;; ) {
            
GIFDecoder::GIFGetByte);
            if ( ( 
$u $this->GIF_buffer[0] ) == 0x00 ) {
                break;
            }
            
GIFDecoder::GIFGetByte$u );
            
/*
             * 07.05.2007.
             * Implemented a new line for a new function
             * to determine the originaly delays between
             * frames.
             *
             */
            
if ( $u == ) {
                
$this->GIF_delays[] = ( $this->GIF_buffer[1] | $this->GIF_buffer[2] << );
            }
        }
    }
    
/*
    :::::::::::::::::::::::::::::::::::::::::::::::::::
    ::
    ::    GIFReadExtension ( )
    ::
    */
    
function GIFReadDescriptor( )
    {
        
$GIF_screen = Array( );
        
GIFDecoder::GIFGetByte);
        
$GIF_screen         $this->GIF_buffer;
        
/*
         * 11.19.2007.
         * Implemented a new line for a new function
         * to determine the originaly XY offsets between
         * frames.
         *
         */
        
$this->GIF_offset[] = Array(
             ( 
$this->GIF_buffer[0] | $this->GIF_buffer[1] << ),
            ( 
$this->GIF_buffer[2] | $this->GIF_buffer[3] << 
        );
        
$GIF_colorF         $this->GIF_buffer[8] & 0x80 0;
        if ( 
$GIF_colorF ) {
            
$GIF_code $this->GIF_buffer[8] & 0x07;
            
$GIF_sort $this->GIF_buffer[8] & 0x20 0;
        } else {
            
$GIF_code $this->GIF_colorC;
            
$GIF_sort $this->GIF_sorted;
        }
        
$GIF_size << $GIF_code;
        
$this->GIF_screen[4] &= 0x70;
        
$this->GIF_screen[4] |= 0x80;
        
$this->GIF_screen[4] |= $GIF_code;
        if ( 
$GIF_sort ) {
            
$this->GIF_screen[4] |= 0x08;
        }
        
$this->GIF_string "GIF87a";
        
GIFDecoder::GIFPutByte$this->GIF_screen );
        if ( 
$GIF_colorF == ) {
            
GIFDecoder::GIFGetByte$GIF_size );
            
GIFDecoder::GIFPutByte$this->GIF_buffer );
        } else {
            
GIFDecoder::GIFPutByte$this->GIF_global );
        }
        
$this->GIF_string .= chr0x2C );
        
$GIF_screen[8] &= 0x40;
        
GIFDecoder::GIFPutByte$GIF_screen );
        
GIFDecoder::GIFGetByte);
        
GIFDecoder::GIFPutByte$this->GIF_buffer );
        for ( ;; ) {
            
GIFDecoder::GIFGetByte);
            
GIFDecoder::GIFPutByte$this->GIF_buffer );
            if ( ( 
$u $this->GIF_buffer[0] ) == 0x00 ) {
                break;
            }
            
GIFDecoder::GIFGetByte$u );
            
GIFDecoder::GIFPutByte$this->GIF_buffer );
        }
        
$this->GIF_string .= chr0x3B );
        
/*
         *
         * Add frames into $GIF_stream array...
         *
         */
        
$this->GIF_arrays[] = $this->GIF_string;
    }
    
/*
    :::::::::::::::::::::::::::::::::::::::::::::::::::
    ::
    ::    GIFGetByte ( $len )
    ::
    */
    /*
     *
     *  05.06.2007.
     *  Made a little modification
     *
     *
     -    function GIFGetByte ( $len ) {
     -        $this->GIF_buffer = Array ( );
     -
     -        for ( $i = 0; $i < $len; $i++ ) {
     +            if ( $this->GIF_bfseek > strlen ( $this->GIF_stream ) ) {
     +                return 0;
     +            }
     -            $this->GIF_buffer [ ] = ord ( $this->GIF_stream { $this->GIF_bfseek++ } );
     -        }
     +        return 1;
     -    }
     */
    
function GIFGetByte$len )
    {
        
$this->GIF_buffer = Array( );
        for ( 
$i 0$i $len$i++ ) {
            if ( 
$this->GIF_bfseek strlen$this->GIF_stream ) ) {
                return 
0;
            }
            
$this->GIF_buffer[] = ord$this->GIF_stream{$this->GIF_bfseek++} );
        }
        return 
1;
    }
    
/*
    :::::::::::::::::::::::::::::::::::::::::::::::::::
    ::
    ::    GIFPutByte ( $bytes )
    ::
    */
    
function GIFPutByte$bytes )
    {
        for ( 
$i 0$i count$bytes ); $i++ ) {
            
$this->GIF_string .= chr$bytes[$i] );
        }
    }
    
/*
    :::::::::::::::::::::::::::::::::::::::::::::::::::
    ::
    ::    PUBLIC FUNCTIONS
    ::
    ::
    ::    GIFGetFrames ( )
    ::
    */
    
function GIFGetFrames( )
    {
        return ( 
$this->GIF_arrays );
    }
    
/*
    :::::::::::::::::::::::::::::::::::::::::::::::::::
    ::
    ::    GIFGetDelays ( )
    ::
    */
    
function GIFGetDelays( )
    {
        return ( 
$this->GIF_delays );
    }
    
/*
    :::::::::::::::::::::::::::::::::::::::::::::::::::
    ::
    ::    GIFGetOffset ( )
    ::
    */
    
function GIFGetOffset( )
    {
        return ( 
$this->GIF_offset );
    }
}
?>
Онлайн: 1
Реклама