2

从这个关于该主题的SO question和我们在网络上其他地方的研究(如这个 Facebook文档链接),似乎可以将图像从 canvas.toDataURL() 直接上传到 Facebook——无需在服务器上托管图像。

我们面临的问题是如何将 base64 编码的数据从 toDataURL() 转换为 Facebook 期望的 multipart/form-data。这在客户端使用 JavaScript 和jQuery.post()是否可行?如果没有,我们可以先将图像保存在服务器上,但如果可能的话,我们更愿意绕过这一步,从客户端做所有事情。

这是针对 PhoneGap 应用程序的。

4

2 回答 2

2

可以将画布作为图片上传到服务器上。我2年前做过一个测试,你可以查一下代码:http ://standupweb.net/canvas/swSaveCanvas.php

那是使用mootools,但那里真的不需要,保存功能中的所有内容都是本机JS代码。

将其与 facebook 集成应该不是一个大问题

于 2012-04-18T18:20:14.930 回答
1

基本上,您需要从URI 方案中删除 '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);
于 2012-04-18T18:36:43.283 回答