PHP base64_docode保存损坏的图像

时间:2016-02-18 05:45:10

标签: php android image base64

我从我的Android应用程序向PHP发送base64编码图像。有时它会存储完整图像(4KB)和某些时间(3KB)(相同图像)。当我在毕加索中使用URL时,4KB大小的图像工作正常但是3KB大小的图像不加载它会显示解码错误。 这是我的PHP代码(有时可以使用)

$encodedImage = str_replace(' ','+',$_POST['encodedProfileImage']);
$data = base64_decode($encodedImage);
$file = 'Pics/'. uniqid() . '.png';
$success = file_put_contents($file, $data);
$BASE_URL = 'http://domain.com/TestApp/';

然后我在PHP中执行SQL操作来存储图像路径。是否有可能在半码解码图像(已损坏)上完成下一个代码操作。

1 个答案:

答案 0 :(得分:2)

您需要在图像数据的开头删除标有data:image/png;base64的部分。之后是实际的base64数据。

使用以下功能: -

function base64_to_png($base64_string, $output_file) {
    $ifp = fopen($output_file, "wb"); 

    $data = explode(',', $base64_string);

    fwrite($ifp, base64_decode($data[1])); 
    fclose($ifp); 

    return $output_file; 
}

如果您想使用str_replace功能,那么可能无法正常工作。我不确定:)

$fname = filter_input(INPUT_POST, "name");
$encodedImage = filter_input(INPUT_POST, "image");
$encodedImage = str_replace('data:image/png;base64,', '', $encodedImage);
$encodedImage = str_replace(' ', '+', $encodedImage);
$encodedImage = base64_decode($encodedImage);
file_put_contents($fname, $encodedImage);
print "Image has been saved!";

希望它会对你有所帮助:)。