Problém při vložení obrázku ve formátu base64
- Webster.K
- Člen | 212
Zdravím všechny, řeším vložení obrázku jako base64. V databázi mám sloupec kde jsou uložené obrázky ve formátu: data:image/png;base64. A řeším jejich zobrazení buď v latte, ale později se to bude vkládat v PDF – nefunguje momentálně ani jedno z toho.
Když vypíši řetězec z databáze přes:
<p>{$row->obrazek|noescape}</p>
tak se řetězec normálně do šablony vypíše tak, jak by měl – tedy toto funguje. Pokud ale udělám:
<img src="{row->obrazek|noescape}">
V latte se zobrazí jen a pouze:
<img src>
Nic víc se nezobrazí. Netušíte někdo, kde by mohla být chyba?
Také když použiji |dataStream tak to sice vrátí něco, co se tváří jako obrázek, ale je rozbitý, protože místo toho, co je na začátku v buňce to vrátí: data:text/plain;base64
Editoval Webster.K (12. 8. 2023 18:46)
- nightfish
- Člen | 519
@WebsterK Místo |noescape
použij |nocheck
:
<img src="{row->obrazek|nocheck}">
(dokumentace)
- Webster.K
- Člen | 212
nightfish napsal(a):
@WebsterK Místo
|noescape
použij|nocheck
:<img src="{row->obrazek|nocheck}">
(dokumentace)
Díky, funguje. Zjistil jsem taky, že když z DB smažu ten začátek: data:image/png;base64 a pak z Latte/Essential/Filters.php na řádku 269 to upravím:
return 'data:' . ($type ? "$type;" : '') . 'base64,' . base64_encode($data);
z tohoto na toto:
return 'data:' . ($type ? "$type;" : '') . 'base64,' . $data;
Tak to také funguje, pokud použiji |dataStream(‚img/png‘)
- Webster.K
- Člen | 212
mystik napsal(a):
Otázka je spíš proč si to do databáze dáváš v base64 a ne přímo jako BLOB. Zbytečně si všechno komplikuješ a databáze zabírá o třetinu víc místa.
Asi síla zvyku, nějak mi přišlo jednoduchý do terminálu napsat base64 img.png a obsah toho co mi to vyhodilo uložit do dabatáze a nepřemýšlel jsem nad tím, že to jde jinak. Ono těch obrázků nebude v DB moc, jestli jich bude 5? tak je to hodně. Spíš je nechci ukládat na disk aby nebyly dostupné a používají se jen a pouze při generování PDF.
Když bych to chtěl udělat jako BLOB, nějaký návod, jak tam ten obrázek dostat?
Editoval Webster.K (12. 8. 2023 19:09)
- Webster.K
- Člen | 212
mystik napsal(a):
Případně kdyby ti z nějakého důvodu nefungovala detekce mime typu z obsahu souboru tak si do DB ukládej i mime a pak
$imgBlob|dataStream:$imgMime
Ok, a jakým způsobem to tam uložim? Momentálně teda nemám formulář co to tam odešle, protože v současné verzi apky to „na hulváta“ kopíruju z termínálu, protože zatím není potřeba to řešit formulářem, ale kdybych chtěl, tak jak na to? Uložit soubor na server problém není :)