回答編集履歴

1

追記

2020/05/03 09:37

投稿

AkitoshiManabe
AkitoshiManabe

スコア5432

test CHANGED
@@ -5,6 +5,118 @@
5
5
  絶対PATHで扱うほうが、デッドリンクを避けやすいと思います。
6
6
 
7
7
 
8
+
9
+ 追記ここから)
10
+
11
+ Canvasに表示されないのは CORS が原因と思います。
12
+
13
+ **応答ヘッダー[Access-Control-Allow-Headers](https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)も確認してください。**
14
+
15
+
16
+
17
+ * MDN [サーバーサイドアクセス制御 (CORS)](https://developer.mozilla.org/ja/docs/Web/HTTP/Server-Side_Access_Control)
18
+
19
+
20
+
21
+
22
+
23
+ > エラーメッセージは出ていません。
24
+
25
+
26
+
27
+ フレームワーク環境から一旦離れると、エラーは確認できます。
28
+
29
+
30
+
31
+ ローカル環境でクロスオリジンを手軽に確認するのに、hostname を ``localhost`` と ``127.0.0.1`` でアクセスしてみる手法があります。
32
+
33
+
34
+
35
+ 以下のような簡単なサンプルコードを書き、確認しました。
36
+
37
+
38
+
39
+ [test.html]
40
+
41
+ ```HTML
42
+
43
+ <body>
44
+
45
+ <img id="same" src="http://localhost:3000/t/test.jpg">
46
+
47
+ <img id="cross" src="http://127.0.0.1:3000/t/test.jpg">
48
+
49
+ <canvas id="view-canvas"></canvas>
50
+
51
+ <script>
52
+
53
+ let imagePath = document.getElementById("same").src;
54
+
55
+ let imagePathX = document.getElementById("cross").src;
56
+
57
+ let dstCanvas = document.getElementById("view-canvas");
58
+
59
+
60
+
61
+ Object.assign( new Image(), {
62
+
63
+ src : imagePath, // imagePathX だとエラー
64
+
65
+ onload(event) {
66
+
67
+ let img = event.target;
68
+
69
+ let { width, height } = img;
70
+
71
+ Object.assign( dstCanvas, { width, height })
72
+
73
+ .getContext("2d")
74
+
75
+ .drawImage( img, 0,0, width, height );
76
+
77
+
78
+
79
+ console.log( dstCanvas.toDataURL() ); // imagePathX だとエラー
80
+
81
+
82
+
83
+ }
84
+
85
+ });
86
+
87
+ </script>
88
+
89
+ </body>
90
+
91
+ <!--
92
+
93
+ 以下のディレクトリ構成で確認
94
+
95
+
96
+
97
+ public/
98
+
99
+ t/
100
+
101
+ test.html
102
+
103
+ test.jpg
104
+
105
+
106
+
107
+ -->
108
+
109
+ ```
110
+
111
+
112
+
113
+ {Canvas} の toDataURL() だけでなく、{CanvasRenderingContext2d} の getImageData() など、Canvas関連APIは クロスオリジンに対するセキュリティがあります。
114
+
115
+
116
+
117
+ 追記ここまで)
118
+
119
+ ----
8
120
 
9
121
 
10
122