Problém při vložení obrázku ve formátu base64

Webster.K
Člen | 192
+
0
-

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 | 474
+
+2
-

@WebsterK Místo |noescape použij |nocheck: <img src="{row->obrazek|nocheck}"> (dokumentace)

Webster.K
Člen | 192
+
-1
-

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‘)

mystik
Člen | 292
+
+2
-

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.

Webster.K
Člen | 192
+
0
-

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)

mystik
Člen | 292
+
0
-

Pokud to budeš mít jako BLOB tak to načteš z DB do proměnné a jen použiješ {$imgBlob|dataStream}.

mystik
Člen | 292
+
0
-

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

Webster.K
Člen | 192
+
0
-

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í :)

mystik
Člen | 292
+
0
-

Tak uz ted nejak ukladas ten obsah v base64. Tak jen smaz to base64_encode a uloz jen ciste obsah toho souboru.