Autor Zpráva
Darker
Profil
Našel jsem funkci na tvoření animovaného gifu, ale vůbec jí nechápu, nebo skoro vůbec... :(
$cmd = 'gifsicle --loop -O1 --multifile --delay 25 - > '.$outfile; 
$desc = array(0 => array("pipe", "r"),1 => array("pipe", "w"),2 => array("pipe", "w")); 
$proc = proc_open($cmd, $desc, $pipes); 
if (!is_resource($proc)) { 
  die('Unable to start gifsicle'); 
} 
for ($frame=0; $frame<$total_frames; $frame++) { 
  $image = RenderFrame($frame); 
  ob_start(); 
  imagegif($image); 
  fwrite($pipes[0], ob_get_contents()); 
  ob_end_clean(); 
  imagedestroy($image); 
} 
fclose($pipes[0]); 
fclose($pipes[1]); 
fclose($pipes[2]); 
proc_close($proc); 

Našel jsem jí na php.net.
Dík za radu :)
Matess
Profil *
darker:
No a co po nás chceš? Jaký je dotaz?
Darker
Profil
Aspoň trochu vysvětlit o co tam jde. Je mi líta ale naprosto netuším, jak tahle věc funguje, a jak si ji mám upravit, aby dělala co chci (překvapivě dělala animované gify z více externích obrázků)
Nox
Profil
K tomu aby to fungovalo potřebuješ mít na serveru nainstalovaný program gifsicle, povolený proc_* funkce, pohrát si z právama, RenderFrame() funkce je tu jaksi nedefinovaná... řešení je nepoužitelné minimálně v případě webhostingu, leda lokálně nebo vps/vlastní server

Lepší než takto krkolomně radši použij Imagick (mj. neví někdo o kompletnějším manuálu než je na php.net?)
Darker
Profil
Imagick není na hostingu co teď používám, na to už jsem narazil dřív. Pokud nemám imagick, mám vůbec šanci ty animované gify udělat?
Petr ZZZ
Profil
Darker:
Animované gify se dají dělat taky např. ve Fotošopu.
Davex
Profil
Darker:
K tvorbě animovaných gifů se dá použít třída GIFEncoder.
Darker
Profil
Jo ale z fotoshopu neudělám webový skript ani kdybych se postavil na hlavu a odrážel ušima.
GIFEncoder je co? Doufám že ne další gif Animator, animované gify dělat umím, ale chci je dělat pomocí PHP.
Alphard
Profil
Darker:
Já mám vyzkoušené http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html Funguje dobře a nemá ani 7 kilo.
Jen tam autor klíče pole (stringy) neobalil do uvozovek, takže při povoleném výpisu Notice si musíte dopsat pár apostrofů.

Což je, jak se dívám, [#7] Davex.
Davex
Profil
Darker:
GIFEncoder je co?
Je to třída na vytváření animovaných gifů v PHP.
Darker
Profil
Třída? Myslím že když jsem googloval, tak jsem něco co mělo dělat animované gify našel na webu PHP classes ale neměl jsem ponětí, jak to použít.
Davex
Profil
Darker:
Ve zdrojácích phpvideotoolkitu je i příklad použití.
Darker
Profil
Už to začínám chápat, moc ti děkuju :)
Teď už si snad poradím, děkuju i všem ostatním za pomoc.
Darker
Profil
Můžu do funkce new GIFEncoder () předávat jako obrázky datový typ resource? Neboli můžu dělat animace z obrázků s kterými jsem předtím už v PHP pracoval?
Alphard
Profil
[#14] Darker
Pokud si vzpomínám, tak ta třída pracuje s binárkami. Přimo s resource asi pracovat neumí, ale můžete ji rozšířit.
Mělo by stačit vložit tam pár řádků, které zachytí výstup imagegif() a předají ho dál.
Darker
Profil
To asi nedokážu, imagegif vrací jen true/false. Problém je, že bych chtěl dělat animace i z obrázků co nemám na serveru, a v tu chvíli mi to přestává fungovat protože to neumí zjistit velikost souboru na cizím serveru.
PS.: Zajímavá otázka: Jak to, že webové prohlížeče umí odhadnout, nebo i přesně zjistit jak velký stahují soubor a php ne?
Alphard
Profil
Darker:
imagegif vrací jen true/false
Ano, ale při neuvedení druhého parametru pošlou binárku obrázku na výstup, tam ji lze zachytit bufferovacími funkcemi. Tohle řešení nemám rád, ale vytvořit si vlastní kanál, do kterého byste ukládal, je těžší.

že bych chtěl dělat animace i z obrázků co nemám na serveru, a v tu chvíli mi to přestává fungovat protože to neumí zjistit velikost souboru
To se snažíte řešit v neprospěch výkonu.
filesize() se používá snad jen u načítání souboru. Celou konstrukci s fread můžete nahradit funkcí file_get_contents().

Jak to, že webové prohlížeče umí odhadnout, nebo i přesně zjistit jak velký stahují soubor a php ne?
Jaký soubor? U downloadu se obvykle posílá hlavička s velikostí. Tu umí zjistit i PHP. Když hlavička chybí a daný formát neobsahuje informace o velikosti, nezjistí to před stažením ani prohlížeč.
Darker
Profil
Alphard:
file_get_contents()
To bych rád, jenže té třídě vůbec nerozumím a nevyznám se v ní :(
Podívám se na to ale moc si nejsem jistý, že to nezvorám.
A teď jsem si uvědomil ještě jeden problém: file_get_contents() neumí číst binárně
Alphard
Profil
[#18] Darker
To je funkce a jejím jediným povinným parametrem je adresa souboru :-)
Darker
Profil
Ano, ale tam, kde bych jí měl dát za fread konstrukci se očekává binární výstup. Tahle funkce vrací string :(
Konstrukce:
fread ( fopen ( $GIF_src [ $i ], "rb" ), filesize ( $GIF_src [ $i ] ) );

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0