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

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

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

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

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

HTML5

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

Q&A

解決済

2回答

3210閲覧

Vue.js:Vueアプリケーション内のCanvas要素に画像を表示させたい

tara-tail

総合スコア32

canvas

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

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

HTML5

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

0グッド

0クリップ

投稿2019/05/02 08:37

編集2019/05/02 08:42

前提・実現したいこと

Vueアプリケーション内にCanvasタグを設置して、描画のテストをしています。
そのCanvas内に、fillRect()などで図を描画することはできました。次に、そのCanvas内にPNG画像を配置したいと考えています。

発生している問題

すでにアップロードしてある画像データ(imgフォルダ内)をCanvas描画させようとしているのですが、以下のコードでは描画されません。
onload内のコンソールログが表示されないので、ここの記載が間違っているようです。
どうか、ご教示のほど、よろしくお願いします。
※HTML、bodyタグなどは省略しています。

html

1<div id="app"> 2 <canvas id="canvas" width="320" height="320" ref="canRef"></canvas> 3<div> 4 5<script> 6 new Vue({ 7 el: '#app', 8 data: { 9 canvas: null, 10 ctx: null, 11 img: null, 12 src: null 13 }, 14 mounted: function() { 15 this.canvas = this.$refs.canRef 16 this.ctx = this.canvas.getContext('2d') 17 this.src = 'img/tomato.png' 18 this.img = new Image() 19 this.img.onload = function() { 20 console.log('loaded') 21 this.ctx.drawImage(this.img, 0, 0); 22 } 23 } 24 }) 25</script>

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

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

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

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

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

guest

回答2

0

自己解決

自己解決しましたので、解決方法を記載します。
まず、this.srcとしていましたが、this.img.srcの間違いでした。また、この行の記載位置もnew Image()の後に書かなければいけませんでした。
これで、onloadはできたのですが、この中のthis.ctxでエラーが表示されました。これは、thisの参照が間違っていたからだと思います。mountedの最初にthisを変数に代入することで、すべて解決できました。
以下に修正部分の全コードを記載します。どなたかのお役に立てば幸いです。

html

1<script> 2 new Vue({ 3 el: '#app', 4 data: { 5 canvas: null, 6 ctx: null, 7 img: null 8 // srcを削除 9 }, 10 mounted: function() { 11 let self = this // thisを変数に代入 12 self.canvas = self.$refs.canRef 13 self.ctx = self.canvas.getContext('2d') 14 // srcの前にself.imgをつけて、new Image()の後に移動 15 self.img = new Image() 16 self.img.src = 'img/tomato.png' 17 self.img.onload = function() { 18 console.log('loaded') 19 // thisをselfに代入したことで、エラーが出ない 20 self.ctx.drawImage(self.img, 0, 0); 21 } 22 } 23 }) 24</script>

投稿2019/05/02 09:38

tara-tail

総合スコア32

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

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

0

参考なりました。
自分の場合はwidthとかの記述追加しました。

let self = this self.canvas = self.$refs.canRef self.ctx = self.canvas.getContext('2d') self.img = new Image() self.img.src = '/camera.jpg' self.img.onload = function() { console.log('loaded') // here self.ctx.canvas.width = window.innerWidth; self.ctx.canvas.height = window.innerHeight; self.ctx.drawImage(self.img, 0, 0); }

投稿2020/06/23 05:59

miyamoto0105

総合スコア216

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問