Forum

Discussione: Creare gif animate con PHP

Visualizzazione risultati 1 fino 14 di 14

  1. 30-05-2008, 12.27.10

    #1
    L'avatar di miki92
    miki92
    miki92 non  connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    3,843

    Predefinito Creare gif animate con PHP

    Buongiorno a tutti,
    che voi sappiate possibile creare gif animate sfruttando le librerie GD?

    Ho cercato in rete ed ho trovato questo:
    Codice PHP:
    <?php
    $imgsrc 
    imagecreatefromgif("Immagine1.gif");
    $imgwm imagecreatefromgif("Animazione1.gif");
    imagecopy($imgsrc$imgwm101000imagesx($imgwm), imagesy($imgwm));
    Header("Content-Type: image/gif");
    imagegif($imgsrc);
    ?>
    Che per non da l'animazione alla gif, cio sovrappone due immagini ma una delle due, quella animata, non si muove.
    Ho sbagliato qualche modifica che ho apportato o non si possono creare gif animate con php e gd2?
    Apprezzi l'aiuto? Offrimi un caff!

  2. 30-05-2008, 14.08.29

    #2
    L'avatar di dreadnaut
    dreadnaut
    dreadnaut non  connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    5,803
    Il primo link su google ti fornisce una class per creare gif animate, con tanto di appropriato forum di supporto. Provala e chiedi li.
    chezDreadnaut dailyDreadnaut Qualcosa da leggere:
    "Un <BR/> impuro, punto."
    "I <P>&nbsp;</P> non hanno diritto di esistere."

  3. 30-05-2008, 16.32.46

    #3
    L'avatar di miki92
    miki92
    miki92 non  connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    3,843
    Grazie dreadnaut una classe molto utile per il problema e che questo script crea una gif animata partendo da varie frames poste in una cartella...ammettendo anche che io scomponga la mia gif in frames dopo come dovrei fare a mettere questa frames su un immagine non animata?
    Apprezzi l'aiuto? Offrimi un caff!

  4. 30-05-2008, 17.24.51

    #4
    L'avatar di debug
    debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872
    Mi sembra che le ultime versioni di photoshop permettano di aprire tutte le istanze delle gif animate.
    Sicuramente Image Ready e Flash lo fanno.


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  5. 30-05-2008, 18.30.22

    #5
    L'avatar di miki92
    miki92
    miki92 non  connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    3,843
    Sicuramente debug hai ragione, perch creo e modifico gif con l'unione (pensa) di Adobe PhotoShop e ImageReady CS (v8) per io voglio fare il tutto con PHP per questo ho chiesto...avrei bisogno di sovrappore una gif animata su una semplice immagine con PHP ma quello script di dreadnaut non fa proprio ci che io voglio.
    Apprezzi l'aiuto? Offrimi un caff!

  6. 30-05-2008, 19.22.27

    #6
    L'avatar di svacant
    svacant
    svacant non  connesso Moderatore
    Data registrazione
    05-05-2005
    Messaggi
    585
    In teoria ma questo un parere personale penso che si dovrebbero sovrapporre le immagini e poi dire che un file gif animato.

    Per ripeto non ho trovato niente in merito ma penso funzioni cos.

  7. 30-05-2008, 21.21.24

    #7
    L'avatar di miki92
    miki92
    miki92 non  connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    3,843
    Io nel codice che ho postato nel post #1 apro due immagine, una gif animata e una gif normale, le sovrappongo e mostro il risultato tramite un header gif.
    Credevo che header gif bastasse per far muovere l'immagine "sotto" cio la gif animata ma invece mi sbagliavo, il codice prende solo la prima frame della gif animata al di sopra gli sovrappone la seconda immagine e mostra il risultato finale.
    Apprezzi l'aiuto? Offrimi un caff!

  8. 30-05-2008, 23.42.22

    #8
    L'avatar di debug
    debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872
    Se vuoi creare una gif animata, devi creare una gif animata!
    Non puoi pretendere di ottenere questo risultato senza il metodo suggerito da dreadnaut!

    Dovrai creare tutti i frame dell'animazione, quindi con le tue sovrapposizioni e gli effetti che vuoi, e poi usare il php.
    Non puoi, a quanto ho capito, fare tutto automaticamente.


    Ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  9. 31-05-2008, 12.22.46

    #9
    L'avatar di miki92
    miki92
    miki92 non  connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    3,843
    Beh allora non avrei proprio postato.

    Come ho detto pi volte partendo da una gif animata (pre-creata o creata al momento con la classe di dreadnaut) ho bisogno di sovrapporre questa gif su un immagine che l'utente caricher temporaneamente nel mio spazio.

    Ora da quanto ho capito non possiamo fare tutto con un solo codice quindi che ne dite se uso la funzione createimagefromgd?
    Con la classe di Dreadnaut creo la gif animata e con un secondo codice sovappongo tutto!?
    Apprezzi l'aiuto? Offrimi un caff!

  10. 31-05-2008, 14.50.34

    #10
    Guest
    Allora, ci che tu vuoi ottenere praticamente di sovrappore una GIF animata ad un background statico?
    Scomponi la GIF nei vari frames, sovrapponi i frames al background, uno per uno, e poi ricrei la GIF partendo dalle immagini risultanti... solo una mia supposizione sul momento per, nn so se si possa fare.

  11. 31-05-2008, 15.57.54

    #11
    L'avatar di miki92
    miki92
    miki92 non  connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    3,843
    Non credo che si possa fare, ma posto comunque il codice per un aiuto:
    Codice PHP:
    <?php
    include "GIFEncoder.class.php";
    /*
        Build a frames array from sources...
    */
    if ( $dh opendir "frames/" ) ) {
        while ( 
    false !== ( $dat readdir $dh ) ) ) {
            if ( 
    $dat != "." && $dat != ".." ) {
                
    $frames [ ] = "frames/$dat";
                
    $framed [ ] = 5;
            }
        }
        
    closedir $dh );
    }
    /*
            GIFEncoder constructor:
            =======================

            image_stream = new GIFEncoder    (
                                URL or Binary data    'Sources'
                                int                    'Delay times'
                                int                    'Animation loops'
                                int                    'Disposal'
                                int                    'Transparent red, green, blue colors'
                                int                    'Source type'
                            );
    */
    $gif = new GIFEncoder    (
                                
    $frames,
                                
    $framed,
                                
    0,
                                
    2,
                                
    000,
                                
    "url"
            
    );
    /*
            Possibles outputs:
            ==================

            Output as GIF for browsers :
                - Header ( 'Content-type:image/gif' );
            Output as GIF for browsers with filename:
                - Header ( 'Content-disposition:Attachment;filename=myanimation.gif');
            Output as file to store into a specified file:
                - FWrite ( FOpen ( "myanimation.gif", "wb" ), $gif->GetAnimation ( ) );
    */
    Header 'Content-type:image/gif' );
    echo    
    $gif->GetAnimation ( );
    ?>
    GIFEncode.class.php
    Codice PHP:
    <?php
    /*
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    ::
    ::    GIFEncoder Version 2.0 by Lszl 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'
    ::
    ::
    ::
    ::  Try on-line GIFBuilder Form demo based on GIFEncoder.
    ::
    ::  http://gifs.hu/phpclasses/demos/GifBuilder/
    ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    */

    Class GIFEncoder {
        var 
    $GIF "GIF89a";        /* GIF header 6 bytes    */
        
    var $VER "GIFEncoder V2.05";    /* 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=>"Does 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    ( 
    );
            }
            
    $this->LOP = ( $GIF_lop > -) ? $GIF_lop 0;
            
    $this->DIS = ( $GIF_dis > -) ? ( ( $GIF_dis ) ? $GIF_dis ) : 2;
            
    $this->COL = ( $GIF_red > -&& $GIF_grn > -&& $GIF_blu > -) ?
                            ( 
    $GIF_red | ( $GIF_grn << ) | ( $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    ( 
    );
                }
                if ( 
    substr $this->BUF $i ], 0) != "GIF87a" && substr $this->BUF $i ], 0) != "GIF89a" ) {
                    
    printf    "%s: %d %s"$this->VER$i$this->ERR 'ERR01' ] );
                    exit    ( 
    );
                }
                for ( 
    $j = ( 13 * ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) ) ), $k TRUE$k$j++ ) {
                    switch ( 
    $this->BUF $i ] { $j } ) {
                        case 
    "!":
                            if ( ( 
    substr $this->BUF $i ], ( $j ), ) ) == "NETSCAPE" ) {
                                
    printf    "%s: %s ( %s source )!"$this->VER$this->ERR 'ERR03' ], ( $i ) );
                                exit    ( 
    );
                            }
                            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 ] { 10 } ) & 0x80 ) {
                
    $cmap * ( << ( ord $this->BUF ] { 10 } ) & 0x07 ) );

                
    $this->GIF .= substr $this->BUF ], 67        );
                
    $this->GIF .= substr $this->BUF ], 13$cmap    );
                
    $this->GIF .= "!\377\13NETSCAPE2.0\3\1" GIFEncoder::GIFWord $this->LOP ) . "\0";
            }
        }
        
    /*
        :::::::::::::::::::::::::::::::::::::::::::::::::::
        ::
        ::    GIFAddFrames...
        ::
        */
        
    function GIFAddFrames $i$d ) {

            
    $Locals_str 13 * ( << ( 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 << ( ord $this->BUF 0  ] { 10 } ) & 0x07 );
            
    $Locals_len << ( ord $this->BUF $i ] { 10 } ) & 0x07 );

            
    $Global_rgb substr $this->BUF 0  ], 13,
                                
    * ( << ( ord $this->BUF 0  ] { 10 } ) & 0x07 ) ) );
            
    $Locals_rgb substr $this->BUF $i ], 13,
                                
    * ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) ) );

            
    $Locals_ext "!\xF9\x04" chr ( ( $this->DIS << ) + ) .
                            
    chr ( ( $d >> ) & 0xFF ) . chr ( ( $d >> ) & 0xFF ) . "\x0\x0";

            if ( 
    $this->COL > -&& ord $this->BUF $i ] { 10 } ) & 0x80 ) {
                for ( 
    $j 0$j < ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) ); $j++ ) {
                    if    (
                            
    ord $Locals_rgb $j } ) == ( ( $this->COL >> 16 ) & 0xFF ) &&
                            
    ord $Locals_rgb $j } ) == ( ( $this->COL >>  ) & 0xFF ) &&
                            
    ord $Locals_rgb $j } ) == ( ( $this->COL >>  ) & 0xFF )
                        ) {
                        
    $Locals_ext "!\xF9\x04" chr ( ( $this->DIS << ) + ) .
                                        
    chr ( ( $d >> ) & 0xFF ) . chr ( ( $d >> ) & 0xFF ) . chr $j ) . "\x0";
                        break;
                    }
                }
            }
            switch ( 
    $Locals_tmp } ) {
                case 
    "!":
                    
    $Locals_img substr $Locals_tmp810 );
                    
    $Locals_tmp substr $Locals_tmp18strlen $Locals_tmp ) - 18 );
                    break;
                case 
    ",":
                    
    $Locals_img substr $Locals_tmp010 );
                    
    $Locals_tmp substr $Locals_tmp10strlen $Locals_tmp ) - 10 );
                    break;
            }
            if ( 
    ord $this->BUF $i ] { 10 } ) & 0x80 && $this->IMG > -) {
                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 } );
                        
    $byte |= 0x80;
                        
    $byte &= 0xF8;
                        
    $byte |= ( ord $this->BUF ] { 10 } ) & 0x07 );
                        
    $Locals_img } = chr $byte );
                        
    $this->GIF .= ( $Locals_ext $Locals_img $Locals_rgb $Locals_tmp );
                    }
                }
                else {
                    
    $byte  ord $Locals_img } );
                    
    $byte |= 0x80;
                    
    $byte &= 0xF8;
                    
    $byte |= ( ord $this->BUF $i ] { 10 } ) & 0x07 );
                    
    $Locals_img } = 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 $i } != $LocalBlock $i } ||
                        
    $GlobalBlock $i } != $LocalBlock $i } ||
                        
    $GlobalBlock $i } != $LocalBlock $i }
                    ) {
                        return ( 
    );
                }
            }

            return ( 
    );
        }
        
    /*
        :::::::::::::::::::::::::::::::::::::::::::::::::::
        ::
        ::    GIFWord...
        ::
        */
        
    function GIFWord $int ) {

            return ( 
    chr $int 0xFF ) . chr ( ( $int >> ) & 0xFF ) );
        }
        
    /*
        :::::::::::::::::::::::::::::::::::::::::::::::::::
        ::
        ::    GetAnimation...
        ::
        */
        
    function GetAnimation ( ) {
            return ( 
    $this->GIF );
        }
    }
    ?>
    Apprezzi l'aiuto? Offrimi un caff!

  12. 01-06-2008, 02.26.05

    #12
    L'avatar di debug
    debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872
    Citazione Originalmente inviato da Zorinik Visualizza messaggio
    Allora, ci che tu vuoi ottenere praticamente di sovrappore una GIF animata ad un background statico?
    Scomponi la GIF nei vari frames, sovrapponi i frames al background, uno per uno, e poi ricrei la GIF partendo dalle immagini risultanti... solo una mia supposizione sul momento per, nn so se si possa fare.
    E' quello che ho suggerito io...


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  13. 01-06-2008, 10.11.49

    #13
    L'avatar di miki92
    miki92
    miki92 non  connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    3,843
    Il problema e come fare, cio dovrei usare imagecopy() perch ho sperimentato che imagecreatefromgd() non va bene perch pi o meno il risultato non cambia.
    Apprezzi l'aiuto? Offrimi un caff!

  14. 12-11-2010, 23.07.58

    #14
    montebue
    montebue non  connesso Utente giovane
    Data registrazione
    19-01-2010
    Messaggi
    31
    miki92 ma poi sei riuscito nel tuo intento?

    Anche io dovrei sovrapporre una gif animata ad un'immagine (jpg)..ma ho il presentimento che non si possa fare. Perlomeno fare in modo che il risultato finale sia una nuova immagine animata. Altrimenti si fa con una pagina HTML in uscita..

Thread Information

Regole di scrittura

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

SEO by vBSEO