Convertir la chaîne Base64 en fichier image?

j'essaie de convertir ma chaîne d'image base64 en fichier image. C'est ma chaîne de Base64:

http://pastebin.com/ENkTrGNG

utilisant le code suivant pour le convertir en fichier image:

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

mais je reçois une erreur de invalid image , qu'est-ce qui ne va pas ici?

115
demandé sur JasonMArcher 2013-03-01 12:49:52

6 réponses

Le problème est que data:image/png;base64, est inclus dans le contenu codé. Il en résultera des données d'image invalides lorsque la fonction base64 les décode. Supprimez ces données dans la fonction avant de décoder la chaîne, comme si.

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 ] == <actual base64 string>
    $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; 
}
208
répondu Austin Brunkhorst 2017-04-29 00:50:18

vous devez supprimer la partie qui dit data:image/png;base64, au début des données d'image. Les données réelles de base64 viennent après cela.

il suffit de tout enlever jusqu'à et y compris base64, (avant d'appeler base64_decode() sur les données) et vous serez très bien.

39
répondu aaaaaa123456789 2013-03-01 08:53:18

peut-être comme ça

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;
}
9
répondu Shimon Doodkin 2017-05-28 13:15:16
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";
}
2
répondu Sthish Visar 2017-10-12 11:44:27

voie facile, je suis en utilisant:

file_put_contents($output_file, file_get_contents($base64_string));
2
répondu Trịnh Trọng Trần Bá 2018-04-10 14:52:12
$datetime = date("Y-m-d 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]";

cela suffira pour le traitement d'image. Remerciements spéciaux à M. Dev Karan Sharma

-3
répondu Manish 2018-07-10 12:26:26