Vložení obrázku do průhledného obrázku a odeslání do prohlížeče
- Milan Obrtlík
- Člen | 50
Dobrý den,
snažím se načíst dva obrázky, jeden do druhého několikrát vložit a
výsledný mix odeslat do prohlížeče.
Našel jsem několik řešení:
- Vygenerovaný obrázek uložit s randomnázvem do veřejné složky
- Vygenerovaný obrázek vložit do Latte jako base64
- Vygenerovaný obrázek odeslat pomocí metody $image->send()
První řešení má problém v tom, že během chvilky brutálně zabordelí obsah veřejné složky a bude potřeba řešit odbordelení. Ale zase bude asi nejrychlejší – pouze jeden request na PHP.
Druhé řešení má nevýhodu v tom, že base64 přidá cca 30% velikosti tomu obrázku a navíc enkódování zežere dost serverového výkonu (možná se mýlím). Ale zas negeneruje tisíce obrázků (stovky MB) a je také jenom na jeden request na PHP.
Třetí řešení kombinuje výhody předchozích dvou, ale zase je na dva PHP requesty.
Uměl by mi někdo poradit, která varianta je nejmíň náročná na zdroje serveru? Případně jestli existuje ještě nějaká jiná varianta?
A druhá část problému – Image::FromFle() mi načítá PNG obrázek bez průhlednosti. Ví někdo jak na to?
- LeonardoCA
- Člen | 296
jsem pro variantu 1. a predpokladam, ze obrazek potrebujes zobrazit jen jednou, pak bych promazani starych udelal jednoduse cronem po dnech
druha cast problemu:
https://api.nette.org/…age.php.html#150
→ https://secure.php.net/…efrompng.php#…
(nezkousel jsem)
ale vypada to, ze nette primo podporuje transparency jen pro
Image:fromBlank()
https://api.nette.org/…age.php.html#223
- Milan Obrtlík
- Člen | 50
Nejprve odpověď pro @LeonardoCA
Obrázek potřebuji zobrazit mockrát, nevím kolikrát a musí být dostupný
po mnoho měsíců :D
O průhlednosti níže.
==================================
Po dlouhém večeru jsem přišel na pár věcí.
Průhlednost – asi největší peklo na světě. Je potřeba vytvořit prázdný TRUECOLOR OBRÁZEK, pak vytvořit průhlednou barvu, vyplnit prázdný obrázek průhlednou barvou, do průhledného obrázku narvat postupně všechny obrázky (první obrázek bude nejvíc „vzadu“) – doteď ty operace trvají pár milisekund – dále je potřeba otevřít output buffer, použít funcki imagepng (tato je suverénně nejpomalejší, fakt masakr – 300ms) a načíst data z output bufferu, pokud to chci na jeden request.
Z toho plyne, že NEMŮŽU pokaždé generovat nový obrázek. Je potřeba ho nacachovat – ručně, nebo použít cizí knihovnu? Pokud ručně, lepší uložit do DB nebo do filesystému?