png图像从base64_decode保存时被裁剪

时间:2013-05-15 13:32:28

标签: php base64

我正在尝试从客户端发送的base64代码在我的服务器上传目录中创建一个映像。下面是相同的代码:

<?php
    $dataURI = $_REQUEST['dataURI'];

    $dataURI = str_replace('data:image/png;base64,', '', $dataURI);
    $dataURI = str_replace(' ', '+', $dataURI);

    $data = base64_decode($dataURI);

    // $filename = UPLOAD_DIR . uniqid() . '.png';
    $filename = UPLOAD_DIR . 'saved-image' . '.png';

    $status = file_put_contents($filename, $data);

?>

图像已成功创建,但由于某种原因,图像被裁剪为一半(水平)。谁能告诉我,这有什么问题?

以下是原始和保存/创建的图像:

原始图片

创建图片

3 个答案:

答案 0 :(得分:1)

您通过HTTP参数获取数据。那些实际上是有限的大小(例如Apache的默认值。这个限制因网络服务器而异,通常可以在服务器配置中设置。

另请注意,PHP post_max_size中的php.ini默认为2MB

答案 1 :(得分:1)

您可能遇到了一些编码问题:

$dataURI = str_replace(' ', '+', $dataURI);

在这里尝试撤消+替换为的尝试,这种情况发生在某个地方 - 最有可能是urldecoded。 /正斜杠字符也是base64符号集的一部分,因此我怀疑任何搞砸了你的+符号也搞砸了这些符号。

我要做的是仔细追踪这些数据的来源并观察所做的转换。

答案 2 :(得分:0)

确认您正在写入文本文件而不是数据库。我最近来回切换试图解决这个问题。事实证明,我的数据库列类型(设置为text)不足以存储图像。我的照片看起来就像你的一样。我切换到longtext,这解决了我的问题。