iPad で使用する Web アプリケーションを作成しています。ユーザーは画像に色を付けるよう招待されます。私はこれに html5 Canvas を使用しており、ここで見つけたチュートリアルに基づいてカラーリングを行っています。最終的には、この画像をユーザーの名前とともにデータベースにアップロードしたいと考えています。
やり方は
ユーザーが色を塗り終わったら、「保存」を押して、toDataURL() を使用してキャンバスを変換します。次に、非表示のフォーム要素にデータを挿入し、フォームを送信して新しいページに移動します。そのようです:
document.getElementById('my_hidden').value = canvas.toDataURL('image/png');
document.forms["form1"].submit();
ここでは、ユーザーの名前とメールアドレスを尋ねます。また、キャンバス データを新しい非表示のフォーム要素に挿入します。そのようです:
value="<?php echo $_POST['my_hidden'];?>"
次に、このフォームを次の php ページのデータベースに送信します。キャンバス データは Blob に格納されます。
これはすべてうまくいきます。
何が問題なの
その最終ページに画像を表示しようとすると、画像に「リソースの読み込みに失敗しました」というエラーが表示されます (「kCFErrorDomainCFNetwork エラー」)。私はこのように表示しようとしています:
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var image = new Image();
image.src = "<?php echo str_replace("\n", "", $_POST['canvas']); ?>";
ctx.drawImage(image, 0, 0);
サーバーから取得したキャンバスデータが悪いのではないかと疑っています。だから私はこのようにそれをチェックしました:
if ( base64_encode(base64_decode($canvas)) === $canvas){
echo '$data is valid';
} else {
echo '$data is NOT valid';
}
そして、それは実際、有効ではありません。次に、最初のフォームの後に同じ方法を使用してチェックしましたが、その時点ではすでに無効です。したがって、その非表示フィールドを介した最初の送信がそれを台無しにしているか、toDataURL() が台無しになっていると思います。
私は決して熟練したプログラマーではありませんが、ここまでやり遂げて、これを終わらせないのは嫌です。ですから、どんな助けも本当に大歓迎です!ありがとう。