質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3235閲覧

Javascriptを使い非同期でAPIにCanvas上に表示された画像をPOSTして返り値を処理する方法

RusuBana

総合スコア12

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2015/09/19 15:12

編集2015/09/19 15:19

###実現したいこと
現在Video上のコマをCanvasに描き、APIにアップロードする処理を実装したく様々なサイトを回っていたのですが、Javascript初心者なもので、結局実装方法がよく理解できずこちらに質問させていただいた所存です。
実装したい処理以下のとおりです。

  1. videoに表示されているコマをボタンでCanvasに書き出し(実装済み)

  2. 書き出した画像をyabumiという画像共有サービスのAPIにPostする。(APIリファレンス)

処理中はアップロードボタンをクリック不能に、事前に用意しておいたローディングGifのdisplay:noneを外し可視化、できればアップロード進捗をパーセント化しプログレスバーにして表示(未実装)
3. Postを完了するとjsonが帰ってくるので、そのjsonを処理してURLを抽出、新しいタブで開く。クリック不能にしたボタンを復帰(未実装)
Boostrapを利用しているので、クリックを無効にする処理はクラス追加のみで行えます。(disabled)
ページは移動せず、バックグラウンド(非同期?)で実行する。

以上の処理を実行するにはどのようなコードを書けば良いのでしょうか。お暇であればご回答よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

躓いている部分のみ実装してみました。
ヒントとして見てください。

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script src="jquery-2.1.4.min.js"></script> <script> function draw() { // ここは動画をコマ抽出したロジックに読み替えてください。 var canvas = document.getElementById('koma'); if ( ! canvas || ! canvas.getContext ) { return false; } var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(20, 20); ctx.lineTo(120, 20); ctx.lineTo(120, 120); ctx.lineTo(20, 120); ctx.closePath(); ctx.stroke(); } function setExpiresAtAndCommt(f) { var ret = confirm("送信します。よろしいですか?"); if(ret == false) return false; var canvas = document.getElementById('koma'); var base64Data = canvas.toDataURL().split(',')[1]; var data = window.atob(base64Data); var buff = new ArrayBuffer(data.length); var arr = new Uint8Array(buff); for( var i = 0; i < data.length; i++){ arr[i] = data.charCodeAt(i); } var blob = new Blob([arr], {type: 'image/png'}); var formData = new FormData(); formData.append('imagedata', blob); formData.append('name', f.name.value); formData.append('expiresAt', new Date(Date.now() + 86400000).toISOString()); $.ajax({ type: 'POST', url: 'https://yabumi.cc/api/images.json', cache: false, data: formData, contentType: false, processData: false, success: function(data, textStatus){ $("#kekka").html(data.url); }, error: function(XMLHttpRequest, textStatus, errorThrown){ alert('Error! ' + textStatus + ' / ' + errorThrown); } }); return false; } </script> </head> <body onload="draw();"> <form name="f" method="post" onsubmit="return setExpiresAtAndCommt(this);"> ファイル名:<input type="text" name="name" value="" /> <input type="submit"/> </form> <canvas id="koma" width="140" height="140"></canvas> <div id="kekka"></div> </body> </html>

開発のコツとしては、
・HTTP Headersなどのプラグインをブラウザに適用させて
期待通り』のリクエストとなっているかチェック
・自身の環境にサーバ(XAMPPとか)を準備し、
やはり『期待通り』のデータが来ているかチェック

ちなみに、実装に流用したサイト
http://am-yu.net/2014/03/09/canvas-blob/
http://www.html5.jp/canvas/how.html

投稿2015/09/20 03:24

TetsujiMiwa

総合スコア1124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RusuBana

2015/09/21 07:00

実装の流れだけではなく、例を提示して頂いたので、より理解して実装することができました。回答有り難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問