PHP base64编码图像无法正确显示

时间:2014-01-27 00:16:02

标签: php

我正在尝试使用base64编码将图像(任何大小)发送到我正在创建的API。编码的字符串作为URL中的参数访问我的API。使用PHP构建的API。

请求到达我的API后,我想将图像存储到我的服务器上,并将文件名保存在数据库中。这是有效的,但是我得到的是实际图像的奇数输出。

作为参考,我也跟着http://blog.justin.kelly.org.au/simple-base64-encodedecode-url-safe-functions/,但结果相同。

我试图在我的服务器上存储的图像:

enter image description here

$encode = base64_encode(file_get_contents($image));

echo $encode;

对于测试,这是我用来传递给我的API的字符串。

在API中:

$image = base64_decode($_POST['image']));
$image_name = md5($image) . ".jpg";
file_put_contents(/public/image/ . $image_name, $image);

这样做,我的图像被放在服务器上的正确目录中,并随机名称保存到数据库中。

但是,当直接导航到图像时,图像会变形:

enter image description here

如果你有敏锐的眼睛,图像的顶部在开始失败之前实际上是正确的,这使我开始考虑字符串是否未被正确编码以作为参数发送?

任何线索都很可爱,欢呼。

编辑:将其更改为POST,删除了urlencode / decode&已移除strtr

2 个答案:

答案 0 :(得分:0)

也许我看错了,但首先你把它编码为base64 - > urlencode然后你解码它base64 - > urldecode再次,后者不应该是相反的顺序吗?

答案 1 :(得分:0)

感谢评论:

base64_encode(file_get_contents($image_path));

不需要urlencodestrtr。使用POST请求,并更改Web服务器上的post_max_size以允许传递更大的图像。

$image = base64_decode($this->getParameters('avatar'));
$image_name = md5($image) . ".jpg";