Konvertieren Base64 Zeichenfolge in eine Bilddatei?

Ich versuche, meine Base64-Bildzeichenfolge in eine Bilddatei zu konvertieren. Dies ist meine Base64-Zeichenfolge:

http://pastebin.com/ENkTrGNG

Verwenden Sie folgenden Code, um es in eine Bilddatei zu konvertieren:

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' ); 

Aber ich erhalte einen Fehler des invalid image , was ist hier falsch?

   

Das Problem ist, dass data:image/png;base64, in den codierten Inhalten enthalten sind. Dies führt zu ungültigen Bilddaten, wenn die base64-function es decodiert. Entfernen Sie diese Daten in der function, bevor Sie die Zeichenfolge dekodieren.

 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; } 

Sie müssen den Teil mit den data:image/png;base64, entfernen data:image/png;base64, am Anfang der Bilddaten. Die eigentlichen base64-Daten kommen danach.

base64_decode() einfach alles bis einschließlich base64, (bevor Sie base64_decode() für die Daten aufrufen), und alles wird gut.

vielleicht so

 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; } 
 if($_SERVER['REQUEST_METHOD']=='POST'){ $image_no="5";//or Anything You Need $image = $_POST['image']; $path = "uploads/$image_no.png"; file_put_contents($path,base64_decode($image)); echo "Successfully Uploaded"; } 

einfache Art, die ich benutze:

 file_put_contents($output_file, file_get_contents($base64_string)); 
 $datetime = date("Ymd h:i:s"); $timestamp = strtotime($datetime); $image = $_POST['image']; $imgdata = base64_decode($image); $f = finfo_open(); $mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE); $temp=explode('/',$mime_type); $path = "uploads/$timestamp.$temp[1]"; file_put_contents($path,base64_decode($image)); echo "Successfully Uploaded->>> $timestamp.$temp[1]"; 

Dies wird für die Bildverarbeitung ausreichen. Besonderer Dank geht an Herrn Dev Karan Sharma