关于这个主题的SO question以及我们在网上其他地方的研究(比如这个Facebook doc link),似乎可以直接从canvas.toDataURL()上传图像到Facebook - 没有在服务器上托管图像。
我们面临的问题是如何将base64编码的数据从toDataURL()转换为Facebook期望的multipart / form-data。这是否可以在客户端使用JavaScript和jQuery.post()?如果没有,我们可以先在服务器上保存图像,但如果可能的话,最好绕过这一步,并从客户端做一切。
这适用于PhoneGap应用。
答案 0 :(得分:2)
可以将画布作为图片上传到服务器上。我在2年前做过测试,你可以查看代码:http://standupweb.net/canvas/swSaveCanvas.php
那是使用mootools,但实际上并不需要它,save函数中的所有内容都是本机JS代码。
将其与facebook集成应该不是一个大问题
答案 1 :(得分:1)
基本上,您需要从URI scheme中删除'data:image / png; base64'(例如,使用canvas.toDataURL(“image / png”))并将其解码为原始形式的图像源。
这是我的代码。我需要使用dojo.toJson,因为facebook发生了一个奇怪的错误。
jQuery.post('index.php',{
data : dojo.toJson({
image_data: img,
signed_request: signedRequest
})
},function(d){
});
这是PHP
$data = json_decode($_POST['data']);
$message = $data->message;
$uploadImage = $data->image_data;
$uploadImage = str_replace('data:image/png;base64,', '', $uploadImage);
$uploadImage = base64_decode($uploadImage);
$name = uniqid('image_') . '.png';
file_put_contents('public/images/users/' . $name, $uploadImage);
$image = array(
'message' => $message,
'src' => '@' . realpath('public/images/users/' . $name),
);
$result = $this->_facebook->uploadPhoto($image);