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 image.src = "@/assets/img/k01.jpg" 51 const ctx = canvas.getContext("2d"); 52 console.log("image-first",image); 53 54 // キャンバスに画像を描画(開始位置0,0) 55 image.onload = function() { 56 ctx.drawImage(image, 0, 0); 57 console.log("image-onload",image); 58 }; 59 image.onerror = function(e) { 60 ctx.drawImage(image, 0, 0); 61 console.log("error", e); 62 63 } 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にも正しくデータが入っているかと思われます。
いろいろ調べてみましたが、このやり方でなぜエラーが出るのかわかりません。
教えていただけると助かります

回答2件
あなたの回答
tips
プレビュー