Torna indietro   AlterVista | Spazio web gratis, hosting free php mysql > Supporto > PHP, MySql e file database

Rispondi
 
LinkBack Strumenti discussione Modalità visualizzazione
  #1 (permalink)  
Vecchio 30-05-2008, 12.27.10
L'avatar di miki92
miki92 miki92 non è connesso
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 1,796
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?
__________________

MessenWorld -> tutto per MSN Messenger.
"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: 2,257
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
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 1,796
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?
__________________

MessenWorld -> tutto per MSN Messenger.
"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: 16,533
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 3.0? Suggerisci | deGallery 5.1! | 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
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 1,796
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.
__________________

MessenWorld -> tutto per MSN Messenger.
"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: 479
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.

Rispondi citando
  #7 (permalink)  
Vecchio 30-05-2008, 21.21.24
L'avatar di miki92
miki92 miki92 non è connesso
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 1,796
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.
__________________

MessenWorld -> tutto per MSN Messenger.
"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: 16,533
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 3.0? Suggerisci | deGallery 5.1! | 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
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 1,796
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!?
__________________

MessenWorld -> tutto per MSN Messenger.
"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
Altervistiano Junior
 
Data registrazione: 16-03-2006
Messaggi: 546
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.
__________________

ZKgallery 2.2 [ZKgallery 2.3? ...work in progress...]
Rispondi citando
  #11 (permalink)  
Vecchio 31-05-2008, 15.57.54
L'avatar di miki92
miki92 miki92 non è connesso
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 1,796
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_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 );
    }
}
?>
__________________

MessenWorld -> tutto per MSN Messenger.
"Non è mai troppo tardi per realizzare il tuo sogno." » Hilary Duff
Rispondi citando
  #12 (permalink)  
Vecchio 01-06-2008, 02.26.05
L'avatar di debug
debug debug non è connesso
Amministratore del forum
 
Data registrazione: 27-01-2004
Messaggi: 16,533
Predefinito

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 2.0 | deForum 3.0? Suggerisci | deGallery 5.1! | deGuest | guardali in faccia | MillenniuMRoma.it ]



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

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.
__________________

MessenWorld -> tutto per MSN Messenger.
"Non è mai troppo tardi per realizzare il tuo sogno." » Hilary Duff
Rispondi citando
Rispondi

Strumenti discussione
Modalità visualizzazione

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

BB code is Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks are Attivato
Pingbacks are Attivato
Refbacks are Disattivato




Tutti gli orari sono GMT +2. Adesso sono le 03.12.39.