3

我正在尝试从客户端发送的 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);

?>

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

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

原始图像

创建的图像

4

3 回答 3

1

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

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

看起来这里试图撤消在某处发生的替换 -+可能它是 urldecoded 的。正/斜杠字符也是 base64 符号集的一部分,所以我怀疑任何弄乱你的+符号的东西也会弄乱它们。

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

于 2013-05-15T13:42:16.850 回答
1

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

另请注意,PHP 有一个post_max_size默认php.ini为 2MB

于 2013-05-15T13:41:36.310 回答
0

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

于 2014-10-13T03:30:47.453 回答