Salvare image pe server din sir base64 in php

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
andras
Mesaje: 430

Salvare image pe server din sir base64 in php

Vreau sa generez codul de bare direct in php si sa salvez ca imagine intr-un fisier. Ceva de genul (pseudocod):

Cod: Selectaţi tot

$barcode = DNS2D::getBarcodePNG($vanz->id, 'QRCODE'); // generare string cod de bare
$fp = fopen('D:/imgb64.png','wb+');
fwrite($fp,$barcode);
fclose($fp);
Obtin stringul $barcode cu DNS2D::getBarcodePNG(), dar am nevoie de imagine. Este posibil?

MarPlo Mesaje: 4343
Daca metoda getBarcodePNG() returneaza un sir base64 pt. imagine, incearca asa:

Cod: Selectaţi tot

$barcode = DNS2D::getBarcodePNG($vanz->id, 'QRCODE'); // generare string cod de bare
$imgb64 = base64_decode($barcode);
file_put_contents('imgb64.png', $imgb64);

andras Mesaje: 430
Exact asa am facut, dar obtin un fisier imagine vid. Probabil nu se genereaza in base64.

MarPlo Mesaje: 4343
Daca prin aplicarea acestui cod afiseza imaginea inseamna ca DNS2D::getBarcodePNG() returneaza un sir base64 cu imaginea:

Cod: Selectaţi tot

echo '<img src="data:image/png;base64,'.DNS2D::getBarcodePNG($vanz->id, 'QRCODE').'" alt="barcode" />';
Nu stiu ce sistem/framework folosesti si nici cum functioneaza acea clasa php pt. barcode, dar vezi in documentatia ei poate are vreo metoda de salvare imaginea direct pe server.
- Sau ce returneaza exact getBarcodePNG().

andras Mesaje: 430
'Folosesc Laravel 5.4 iar clasa DNS2D returneaza un sir :

Cod: Selectaţi tot

$barcode = DNS2D::getBarcodePNG($vanz->id, 'QRCODE'); //iVBORw0KGgoAAAANSUhEUgAAAD8AAAA/AQMAAABtkYKcAAAABlBMVEX///8AAABVwtN+AAAAAXRSTlMAQObYZgAAAMpJREFUKJF10LsNgzAQBmBLLujCBmQRS1kLKiKxR1iFCeIV6NxackOkyJe73+BgSCyKT7rjXororelGUf0EAV4ZskZdvghkiL+nQJ+QQ7H+i+aE2Au4hW/XXgk8RtjmCfYIAvg1an0JPHns3KMV+CPkMbR1XIHzM64WIYHhFvcdcA0JxX5OyRmp4LgoTeTraigRbDVgwgNQ0KUtYjfTVIBejhY5gp6qsAMfKiAESHIB/hHwvQy2RxpegHUKICQHR3IGLi974eCyzoYPDn5O1wI1AGsAAAAASUVORK5CYII=
Problema e ca sint obligat sa generez codul de bare direct in PHP (controller) pentru ca preiau id-ul inregistrarii nou adugate in baza de date. Mai studiez problema.

andras Mesaje: 430
Am clarificat, multumesc pentru ajutor.
Clasa DNS2D genereaza in base64, functioneaza cu secventa:

Cod: Selectaţi tot

$barcode = DNS2D::getBarcodePNG($vanz->id, 'QRCODE');
$imgb64 = base64_decode($barcode);
$filename = 'barcode_'.$vanz->id.'.png';
Storage::disk('barcode')->put($filename, $imgb64);
Ultima linie (specifica Laravel) fiind echivalenta cu file_put_contents($filename, $imgb64). Salut!