Hướng dẫn base64 to image php

I am trying to convert my base64 image string to an image file. This is my Base64 string:

Nội dung chính

  • How to convert base64 to image file in php?
  • How convert base64 to image and save to folder in PHP?
  • How decode base64 in PHP?
  • What is base64 image?

//pastebin.com/ENkTrGNG

Using following code to convert it into an image file:

function base64_to_jpeg[ $base64_string, $output_file ] {
    $ifp = fopen[ $output_file, "wb" ]; 
    fwrite[ $ifp, base64_decode[ $base64_string] ]; 
    fclose[ $ifp ]; 
    return[ $output_file ]; 
}

$image = base64_to_jpeg[ $my_base64_string, 'tmp.jpg' ];

But I am getting an error of invalid image, whats wrong here?

JasonMArcher

13.5k22 gold badges55 silver badges51 bronze badges

asked Mar 1, 2013 at 8:49

0

The problem is that data:image/png;base64, is included in the encoded contents. This will result in invalid image data when the base64 function decodes it. Remove that data in the function before decoding the string, like so.

function base64_to_jpeg[$base64_string, $output_file] {
    // open the output file for writing
    $ifp = fopen[ $output_file, 'wb' ]; 

    // split the string on commas
    // $data[ 0 ] == "data:image/png;base64"
    // $data[ 1 ] == 
    $data = explode[ ',', $base64_string ];

    // we could add validation here with ensuring count[ $data ] > 1
    fwrite[ $ifp, base64_decode[ $data[ 1 ] ] ];

    // clean up the file resource
    fclose[ $ifp ]; 

    return $output_file; 
}

answered Mar 1, 2013 at 8:58

14

An easy way I'm using:

file_put_contents[$output_file, file_get_contents[$base64_string]];

This works well because file_get_contents can read data from a URI, including a data:// URI.

miken32

40.4k15 gold badges99 silver badges139 bronze badges

answered Apr 10, 2018 at 14:52

Henry TrầnHenry Trần

1,10610 silver badges12 bronze badges

5

You need to remove the part that says data:image/png;base64, at the beginning of the image data. The actual base64 data comes after that.

Just strip everything up to and including base64, [before calling base64_decode[] on the data] and you'll be fine.

ashleedawg

19.3k7 gold badges69 silver badges100 bronze badges

answered Mar 1, 2013 at 8:53

aaaaaa123456789aaaaaa123456789

5,1881 gold badge20 silver badges33 bronze badges

1

maybe like this

function save_base64_image[$base64_image_string, $output_file_without_extension, $path_with_end_slash="" ] {
    //usage:  if[ substr[ $img_src, 0, 5 ] === "data:" ] {  $filename=save_base64_image[$base64_image_string, $output_file_without_extentnion, getcwd[] . "/application/assets/pins/$user_id/"]; }      
    //
    //data is like:    data:image/png;base64,asdfasdfasdf
    $splited = explode[',', substr[ $base64_image_string , 5 ] , 2];
    $mime=$splited[0];
    $data=$splited[1];

    $mime_split_without_base64=explode[';', $mime,2];
    $mime_split=explode['/', $mime_split_without_base64[0],2];
    if[count[$mime_split]==2]
    {
        $extension=$mime_split[1];
        if[$extension=='jpeg']$extension='jpg';
        //if[$extension=='javascript']$extension='js';
        //if[$extension=='text']$extension='txt';
        $output_file_with_extension=$output_file_without_extension.'.'.$extension;
    }
    file_put_contents[ $path_with_end_slash . $output_file_with_extension, base64_decode[$data] ];
    return $output_file_with_extension;
}

answered May 25, 2016 at 17:26

1

That's an old thread, but in case you want to upload the image having same extension-

    $image = $request->image;
    $imageInfo = explode[";base64,", $image];
    $imgExt = str_replace['data:image/', '', $imageInfo[0]];      
    $image = str_replace[' ', '+', $imageInfo[1]];
    $imageName = "post-".time[].".".$imgExt;
    Storage::disk['public_feeds']->put[$imageName, base64_decode[$image]];

You can create 'public_feeds' in laravel's filesystem.php-

   'public_feeds' => [
        'driver' => 'local',
        'root'   => public_path[] . '/uploads/feeds',
    ],

answered Dec 31, 2018 at 17:39

1

if[$_SERVER['REQUEST_METHOD']=='POST']{
$image_no="5";//or Anything You Need
$image = $_POST['image'];
$path = "uploads/".$image_no.".png";

$status = file_put_contents[$path,base64_decode[$image]];
if[$status]{
 echo "Successfully Uploaded";
}else{
 echo "Upload failed";
}
}

Julfikar

1,2132 gold badges16 silver badges33 bronze badges

answered Oct 12, 2017 at 11:44

3

This code worked for me.

Chủ Đề