How can I convert an image from a URL to Base64 encoding?

3

9 Answers

I think that it should be:

$path = 'myfolder/myimage.png'; $type = pathinfo($path, PATHINFO_EXTENSION); $data = file_get_contents($path); $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data); 
4

Easy:

$imagedata = file_get_contents("/path/to/image.jpg"); // alternatively specify an URL, if PHP settings allow $base64 = base64_encode($imagedata); 

Bear in mind that this will enlarge the data by 33%, and you'll have problems with files whose size exceed your memory_limit.

1

Also use this way to represent an image in Base64-encoded format...

Find the PHP function file_get_content and next use the function base64_encode.

And get the result to prepare str as data:" . file_mime_type . " base64_encoded string. Use it in the img src attribute. The following code ma be helpful:

// A few settings $img_file = 'raju.jpg'; // Read image path, convert to base64 encoding $imgData = base64_encode(file_get_contents($img_file)); // Format the image SRC: data:{mime};base64,{data}; $src = 'data: '.mime_content_type($img_file).';base64,'.$imgData; // Echo out a sample image echo '<img src="'.$src.'">'; 
1

Just in case you are (for whatever reason) unable to use curl nor file_get_contents, you can work around:

$img = imagecreatefrompng('...'); ob_start(); imagepng($img); $bin = ob_get_clean(); $b64 = base64_encode($bin); 
0
<img src="data:image/png;base64,<?php echo base64_encode(file_get_contents("IMAGE URL HERE")) ?>"> 

I was trying to use this resource, but I kept getting an error. I found the code above worked perfectly.

I just replaced "IMAGE URL HERE" with the URL of your image -

1

Very simple and to be commonly used:

function getDataURI($imagePath) { $finfo = new finfo(FILEINFO_MIME_TYPE); $type = $finfo->file($imagePath); return 'data:' . $type . ';base64,' . base64_encode(file_get_contents($imagePath)); } // Use the above function like below: echo '<img src="' . getDataURI('./images/my-file.svg') . '" alt="">'; echo '<img src="' . getDataURI('./images/my-file.png') . '" alt="">'; 

Note: The MIME type of the file will be added automatically (taking help from this PHP documentation).

Here is the code for uploading to encode and save it to a MySQL database:

if (!isset($_GET["getfile"])) { if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br>"; } else { move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]); $bin_string = file_get_contents($_FILES["file"]["name"]); $hex_string = base64_encode($bin_string); $mysqli = mysqli_init(); if (!$mysqli->real_connect('localhost', 'root', '', 'arihant')) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } $mysqli->query("INSERT INTO upload(image) VALUES ('" . $hex_string . "')"); } } 

For showing the image, use this:

echo "<img src='data:image/jpeg;base64, $image' width=300>"; 
1

You can also do this via cURL. You just need a path to an image file and pass it to the function given below...

public static function getImageDataFromUrl($url) { $urlParts = pathinfo($url); $extension = $urlParts['extension']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, 0); $response = curl_exec($ch); curl_close($ch); $base64 = 'data:image/' . $extension . ';base64,' . base64_encode($response); return $base64; } 

Here is an example using a cURL call... This is better than the file_get_contents() function. Of course, use base64_encode().

<?php $url = ""; $ch = curl_init($url); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); curl_close($ch); ?> <img src="data:image/png;base64,<?php echo base64_encode($output);?>"> 
1