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:
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?
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;
}
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.
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;
}
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";
}
voie facile, je suis en utilisant:
file_put_contents($output_file, file_get_contents($base64_string));
$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