Autor | Zpráva | ||
---|---|---|---|
Darker Profil |
#1 · Zasláno: 8. 9. 2010, 12:54:58
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 * |
#2 · Zasláno: 8. 9. 2010, 15:58:35
darker:
No a co po nás chceš? Jaký je dotaz? |
||
Darker Profil |
#3 · Zasláno: 8. 9. 2010, 16:06:18
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 |
#4 · Zasláno: 8. 9. 2010, 16:12:17
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 |
#5 · Zasláno: 8. 9. 2010, 18:08:49
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 |
#6 · Zasláno: 8. 9. 2010, 19:22:02
Darker:
Animované gify se dají dělat taky např. ve Fotošopu. |
||
Davex Profil |
#7 · Zasláno: 8. 9. 2010, 19:36:43
Darker:
K tvorbě animovaných gifů se dá použít třída GIFEncoder. |
||
Darker Profil |
#8 · Zasláno: 8. 9. 2010, 20:03:23
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 |
#9 · Zasláno: 8. 9. 2010, 20:21:53 · Upravil/a: Alphard
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 |
#10 · Zasláno: 8. 9. 2010, 20:22:05
Darker:
„GIFEncoder je co?“ Je to třída na vytváření animovaných gifů v PHP. |
||
Darker Profil |
#11 · Zasláno: 8. 9. 2010, 20:23:45 · Upravil/a: Darker
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 |
#12 · Zasláno: 8. 9. 2010, 20:27:39
Darker:
Ve zdrojácích phpvideotoolkitu je i příklad použití. |
||
Darker Profil |
#13 · Zasláno: 8. 9. 2010, 20:55:57
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 |
#14 · Zasláno: 9. 9. 2010, 15:33:15
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 |
#15 · Zasláno: 9. 9. 2010, 15:47:02
|
||
Darker Profil |
#16 · Zasláno: 9. 9. 2010, 16:11:37 · Upravil/a: Darker
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 |
#17 · Zasláno: 9. 9. 2010, 16:24:08
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 |
#18 · Zasláno: 9. 9. 2010, 16:31:41 · Upravil/a: Darker
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 |
#19 · Zasláno: 9. 9. 2010, 16:38:03
|
||
Darker Profil |
#20 · Zasláno: 9. 9. 2010, 17:14:47 · Upravil/a: Darker
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 ] ) ); |
||
Časová prodleva: 14 let
|
0