Torna indietro   AlterVista | Spazio web gratis, hosting free php mysql > Supporto > PHP, MySql e file database
FAQ Lista utenti Calendario Cerca I messaggi di oggi Segna tutti i forums come letti

Rispondi
 
LinkBack Strumenti discussione Cerca in questa discussione Modalità visualizzazione
  #1 (permalink)  
Vecchio 30-05-2008, 12.27.10
L'avatar di miki92
miki92 miki92 non è connesso
Utente attivo
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 288
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
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?
__________________
:::Miki92™::: | Emoticons MSN | Animoticons MSN | Scripts | Generatore di Feed RSS | Su che Server Sei?
|| Scambio Contatti MSN ||
"Non è mai troppo tardi per realizzare il tuo sogno" - Hilary Duff
Rispondi citando
  #2 (permalink)  
Vecchio 30-05-2008, 14.08.29
L'avatar di dreadnaut
dreadnaut dreadnaut non è connesso
Super Moderatore
 
Data registrazione: 22-02-2004
Messaggi: 1,751
Invia un messaggio via ICQ a dreadnaut Invia un messaggio via MSN a dreadnaut
Predefinito

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
"Un <BR/> è impuro, punto."
"I <P>&nbsp;</P> non hanno diritto di esistere."
Rispondi citando
  #3 (permalink)  
Vecchio 30-05-2008, 16.32.46
L'avatar di miki92
miki92 miki92 non è connesso
Utente attivo
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 288
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

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?
__________________
:::Miki92™::: | Emoticons MSN | Animoticons MSN | Scripts | Generatore di Feed RSS | Su che Server Sei?
|| Scambio Contatti MSN ||
"Non è mai troppo tardi per realizzare il tuo sogno" - Hilary Duff
Rispondi citando
  #4 (permalink)  
Vecchio 30-05-2008, 17.24.51
L'avatar di debug
debug debug non è connesso
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 12,697
Predefinito

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 2.0 | deForum 2.0.4 | deGallery 5.0! | deGuest | guardali in faccia | MillenniuMRoma.it ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #5 (permalink)  
Vecchio 30-05-2008, 18.30.22
L'avatar di miki92
miki92 miki92 non è connesso
Utente attivo
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 288
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

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.
__________________
:::Miki92™::: | Emoticons MSN | Animoticons MSN | Scripts | Generatore di Feed RSS | Su che Server Sei?
|| Scambio Contatti MSN ||
"Non è mai troppo tardi per realizzare il tuo sogno" - Hilary Duff
Rispondi citando
  #6 (permalink)  
Vecchio 30-05-2008, 19.22.27
L'avatar di svacant
svacant svacant non è connesso
Moderatore
 
Data registrazione: 05-05-2005
Messaggi: 371
Predefinito

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ì.
__________________
La cosa buona nell'informatica è che non riesci mai a raggiungere l'eccellenza.

[ AvBar ] [ Promuovimi ]
News:AvBar Update 29-05-08...Corri ad aggiornarla
Vuoi giocare a scacchi con me? inviami un privato.


Rispondi citando
  #7 (permalink)  
Vecchio 30-05-2008, 21.21.24
L'avatar di miki92
miki92 miki92 non è connesso
Utente attivo
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 288
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

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.
__________________
:::Miki92™::: | Emoticons MSN | Animoticons MSN | Scripts | Generatore di Feed RSS | Su che Server Sei?
|| Scambio Contatti MSN ||
"Non è mai troppo tardi per realizzare il tuo sogno" - Hilary Duff
Rispondi citando
  #8 (permalink)  
Vecchio 30-05-2008, 23.42.22
L'avatar di debug
debug debug non è connesso
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 12,697
Predefinito

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 2.0 | deForum 2.0.4 | deGallery 5.0! | deGuest | guardali in faccia | MillenniuMRoma.it ]



Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™
Rispondi citando
  #9 (permalink)  
Vecchio 31-05-2008, 12.22.46
L'avatar di miki92
miki92 miki92 non è connesso
Utente attivo
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 288
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

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!?
__________________
:::Miki92™::: | Emoticons MSN | Animoticons MSN | Scripts | Generatore di Feed RSS | Su che Server Sei?
|| Scambio Contatti MSN ||
"Non è mai troppo tardi per realizzare il tuo sogno" - Hilary Duff
Rispondi citando
  #10 (permalink)  
Vecchio 31-05-2008, 14.50.34
L'avatar di Zorinik
Zorinik Zorinik non è connesso
Utente attivo
 
Data registrazione: 16-03-2006
Residenza: Licata (AG)
Messaggi: 479
Invia un messaggio via MSN a Zorinik Invia un messaggio via Yahoo a Zorinik Manda un messaggio tramite Skype™ a Zorinik
Predefinito

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.
__________________
Rispondi citando
  #11 (permalink)  
Vecchio 31-05-2008, 15.57.54
L'avatar di miki92
miki92 miki92 non è connesso
Utente attivo
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 288
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

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 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'
::
::
::
::  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