2

トピックに関するこのSOの質問と、Web 上の他の場所での調査 (この 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 を使用していましたが、実際には必要ありません。save 関数内のすべてがネイティブ JS コードです。

それをFacebookと統合することは大きな問題ではないはずです

于 2012-04-18T18:20:14.930 に答える
1

基本的に、「data:image/png;base64」をURI スキームから削除し (たとえば、canvas.toDataURL("image/png") を使用して)、元の形式の画像ソースにデコードする必要があります。

これが私のコードです。Facebookで奇妙なバグが発生したため、dojo.toJsonを使用する必要があります。

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 に答える