将Base64图像转换为文件会返回无效的图像/数据

时间:2017-06-10 19:56:35

标签: php image base64 image-conversion

过去两天我一直在尝试使用不同的方法将base64字符串转换为图像文件,但每次输出文件都没有显示图像(它确实显示大小和一些编码数据)。

注意: 1.浏览器将文件解释为文档而不是图像默认,但我非常确定这不是问题,因为我尝试下载文件localy,结果相同。 2.我试图将在线工具的输出结果与codebeautify.org/base64-to-image-converter进行比较,因为图像文件中的数据似乎与我的数据不同。 3.目录和文件具有775个权限,而apache具有chown

Base64字符串:https://dpaste.de/gP7D/raw

方法A:

list($type, $profile_image) = explode(';', $profile_image);
                list(,$extension) = explode('/',$type);
                list(,$profile_image)      = explode(',', $profile_image);
                if($extension == 'jpeg'){$extension = "jpg";}
                $filePath = '../uploads/profile_images/'.$uname.'.'.$extension; // using uname instead of unique id to not expose the uqniue key/session
                $profile_image = base64_decode($profile_image);
                file_put_contents($filePath, $profile_image);

方法B:

list($type, $profile_image) = explode(';', $profile_image);
                list(,$extension) = explode('/',$type);
                list(,$profile_image)      = explode(',', $profile_image);
                $filePath = '../uploads/profile_images/'.$uname.'.'.$extension;
                $ifp = fopen($filePath, 'wb');
                fwrite($ifp, base64_decode($profile_image));
                fclose($ifp);

我做错了什么?

更新 显然,Apache / php.ini的最大max_input_vars为5000,而我的base64字符串要高得多。这篇文章可以标记为已解决。

2 个答案:

答案 0 :(得分:1)

似乎你必须删除base64编码字符串的开头,这不是base64编码数据的一部分。 从base64字符串中删除"data:image/jpeg;base64"

我做了一些简单的测试并获得了图片......

答案 1 :(得分:1)

Apache / Php.ini文件的最大max_input_vars为5000,而我的base64字符串要高得多。