PHP base64_decode()。toDataURL()

时间:2017-06-30 20:25:25

标签: javascript php base64 png todataurl

我有一个从Javascript函数.toDataUrl()创建的编码字符串。每次我尝试使用PHP base64_decode()将其转换为二进制时,它会截断二进制文件。我已经尝试了以下各种项目:

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

这些都不会产生正确的文件。另外需要注意的是,当我使用标准的png base64在线解码器时,图像看起来100%正确,因此问题似乎在转换中发生。

有人会有额外的想法。我花了几天时间试图研究这个没有运气。

1 个答案:

答案 0 :(得分:0)

这是我将通过ajax发送的数据转换为php的函数。它一直对我来说完美无瑕。

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