2017-06-30 1 views
0

J'ai une chaîne encodée créée à partir de la fonction Javascript .toDataUrl(). Chaque fois que j'essaye de convertir ceci en binaire avec PHP base64_decode(), il tronque le binaire. J'ai déjà essayé divers éléments tels que les suivants:PHP base64_decode() .toDataURL()

//First Attempt  
$encoded = str_replace('data:image/png;base64,', '', $sig); 
    $decodedstring = base64_decode(str_replace(array(' ', '_'), array('+', '/'), $encoded)); 

    $decodedstring = base64_decode(chunk_split($encoded)); 

//2nd attempt 
    $encoded = str_replace([' ','data:image/png;base64,'], ['+',''], $sig); 
    $decodedstring = ""; 
    for ($i=0; $i < ceil(strlen($encoded)/256); $i++) 
     $decodedstring = $decodedstring . base64_decode(substr($encoded,$i*256,256)); 

//Other attempt 
    $decodedstring = base64_decode(str_replace(['data:image/png;base64,', ' '], ['','+'], $sig)); 

Aucun de ces fichiers ne produit le bon fichier. Aussi à noter, que lorsque j'utilise les décodeurs en ligne standard png base64, l'image semble 100% correcte, donc le problème semble se produire dans la conversion.

Quelqu'un aurait-il d'autres idées? J'ai passé quelques jours à essayer de faire des recherches sans succès.

+0

Sans données d'exemple, nous ne pouvons pas reproduire le problème. – Sammitch

+0

@Sammitch Malheureusement, cette donnée particulière est quelque chose que je ne peux pas poster car c'est une signature. De plus, nous n'avons pas été en mesure de le reproduire nous-mêmes avec une signature aléatoire. –

Répondre

0

C'est une fonction que j'ai faite pour convertir les données envoyées via ajax en php. Cela a toujours fonctionné parfaitement pour moi.

function prepare_image($string, $file_name) { 
    list($type, $string) = explode(';', $string); 
    list(, $string) = explode(',', $string); 
    $string = base64_decode($string); 
    return $string; 
}