我正在尝试从客户端发送的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);
?>
图像已成功创建,但由于某种原因,图像被裁剪为一半(水平)。谁能告诉我,这有什么问题?
以下是原始和保存/创建的图像:
原始图片
创建图片
答案 0 :(得分:1)
您通过HTTP参数获取数据。那些实际上是有限的大小(例如Apache的默认值。这个限制因网络服务器而异,通常可以在服务器配置中设置。
另请注意,PHP post_max_size
中的php.ini
默认为2MB
答案 1 :(得分:1)
您可能遇到了一些编码问题:
$dataURI = str_replace(' ', '+', $dataURI);
在这里尝试撤消+
替换为的尝试,这种情况发生在某个地方 - 最有可能是urldecoded。
/
正斜杠字符也是base64符号集的一部分,因此我怀疑任何搞砸了你的+
符号也搞砸了这些符号。
我要做的是仔细追踪这些数据的来源并观察所做的转换。
答案 2 :(得分:0)
确认您正在写入文本文件而不是数据库。我最近来回切换试图解决这个问题。事实证明,我的数据库列类型(设置为text
)不足以存储图像。我的照片看起来就像你的一样。我切换到longtext
,这解决了我的问题。