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

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

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

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

Vue.js

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

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

JavaScript

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

Q&A

解決済

1回答

1403閲覧

vueのコンポーネント内でcanvasを使用して画像を読み込ませたいが、image.onloadの部分でエラーが表示される。

DKI

総合スコア11

canvas

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

Vue.js

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

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

JavaScript

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

0グッド

0クリップ

投稿2021/04/07 03:00

vueのコンポーネント内でcanvasを使用して画像を読み込ませたいが、image.onloadの部分でエラーが表示される。

エラー文

Uncaught DOMException: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The HTMLImageElement provided is in the 'broken' state. at Image.image.onerror (webpack-internal:///./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/Canvas.vue?vue&type=script&lang=js&:57:13)

→キャッチされないDOMException:「CanvasRenderingContext2D」で「drawImage」の実行に失敗しました:提供されたHTMLImageElementは「壊れた」状態です。

コード

JavaScript

1<template> 2 <div> 3 <div id="canvas-area"> 4 <canvas 5 id="myCanvas" 6 width="250px" 7 height="250px" 8 class="canvas" 9 ></canvas> 10 </div> 11 <img src="@/assets/img/title.jpg"> 12 <v-btn 13 @click="imageDraw(this.canvas)" 14 > 15 表示 16 </v-btn> 17 </div> 18</template> 19 20<style scoped> 21#myCanvas { 22 border: 1px solid #000000; 23} 24</style> 25 26<script> 27export default { 28 name: "Canvas", 29 props: [ 30 "NewAuthor", 31 "newTitleName" 32 ], 33 data() { 34 return { 35 canvas: null, 36 context: null, 37 isDrag: false, 38 max_width: 250, 39 max_height: 250, 40 }; 41 }, 42 mounted() { 43 this.canvas = document.querySelector("#myCanvas"); 44 this.context = this.canvas.getContext("2d"); 45 this.imageDraw(this.canvas); 46 }, 47 methods: { 48 imageDraw: function (canvas) { 49 let image = new Image(); 50 const ctx = canvas.getContext("2d"); 51 console.log("image-first",image); 52 53 // キャンバスに画像を描画(開始位置0,0) 54 image.onload = function() { 55 ctx.drawImage(image, 0, 0); 56 console.log("image-onload",image); 57 }; 58 image.onerror = function(e) { 59 ctx.drawImage(image, 0, 0); 60 console.log("error", e); 61 62 } 63 image.src = "@/assets/img/k01.jpg" 64 console.log("image-final",image); 65 console.log("image-width",image.width); 66 console.log("image-heigth",image.height); 67 }, 68 }, 69} 70</script>

img srcでは画像は表示されているため、画像ファイルやパスは間違っていないはずです。
エラー文はonerror内のものになっています。

おそらくonloadかgetContext('2d')かdrawImage()の書き方あたりが間違っている。
もしくはimageの中が違うのかなと思います。

console.log("image-final",image);

→実行結果
<img src="@/assets/img/title.jpg">

となり、imageにも正しくデータが入っているかと思われます。

いろいろ調べてみましたが、このやり方でなぜエラーが出るのかわかりません。

教えていただけると助かります

追記
https://ja.stackoverflow.com/questions/29032/html%EF%BC%95canvas%E3%81%A7png%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%97%E3%81%9F%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C-%E3%81%A4%E3%81%BE%E3%81%A5%E3%81%84%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99

こちらの方法で順番を変えてみましたが、だめでした

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

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

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

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

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

DKI

2021/04/09 03:57

かしこまりました!
guest

回答1

0

自己解決

こちらかいけついたしました

投稿2021/04/09 03:58

DKI

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問