Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create/display image from dataURL

Tags:

php

image

base64

is it possible to create and display a picture file from dataURL received by POST? Something like:

<?
$imgstr = $_POST["imgdata"]; //data:image/png;base64,.... etc (it's always PNG)
echo base64_decode($imgstr); // idk what this really does
?>

I can't use <img> tag to display it. It needs to act like a "normal" image file.

like image 698
jack moore Avatar asked Jun 20 '11 21:06

jack moore


2 Answers

Yes, try:

<img alt="Base64 Image" src="data:image/png;base64,{$imgstr}" />

Edit: make sure you clean up your $_POST, so people do not insert dangerous junk...

like image 131
djdy Avatar answered Sep 18 '22 22:09

djdy


If e.g. your input is

// Red dot graphic, stolen from Wikipedia
$imgstr = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';

Then you can do what you want with

// Grab the MIME type and the data with a regex for convenience
if (!preg_match('/data:([^;]*);base64,(.*)/', $imgstr, $matches)) {
    die("error");
}

// Decode the data
$content = base64_decode($matches[2]);

// Output the correct HTTP headers (may add more if you require them)
header('Content-Type: '.$matches[1]);
header('Content-Length: '.strlen($content));

// Output the actual image data
echo $content;
die;
like image 44
Jon Avatar answered Sep 21 '22 22:09

Jon