前提・実現したいこと
heroku+Node.jsでWebアプリを作成しています.
フロント(html)の<canvas>を,サーバーサイド(Node.js)側で,toDataURL()で画像化したいです.
当初は,サーバーサイドのNode.jsではなく,レンダリングをするJavaScript(htmlから呼び出し)内でtoDataURL()処理をしようとしていたのですが,canvasにCross Originの画像が描画されている部分があるため,CORSエラーによりtoDataURL()が実行できませんでした(この方と同じエラーです).
CORSエラーを回避するために,サーバーサイドで処理しようとしています.
ソースコード
html
1<canvas id="canvas"></canvas> 2<input type="button" value="get_image" id="get_image"> 3 4<script> 5var socketio = io(); 6$(function(){ 7 $('#get_image').on('click', function() { //NodeへcanvasのDOMを送信 8 var canvas = document.getElementById("canvas"); 9 socketio.emit("get_image", canvas); 10 }); 11}); 12</script>
Node
1const io = require('socket.io')(http); 2io.on('connection',function(socket){ 3 socket.on('get_image',function(msg){ //canvasのDOMを受信 4 get_image(msg); 5 }); 6}); 7function get_image(dom){ //canvasをデータURIに変換 8 var canvas = dom.toDataURL("image/png"); 9 console.log(canvas); 10}
発生しているエラー
var canvas = dom.toDataURL("image/png"); ^ TypeError: dom.toDataURL is not a function
このエラーについて,どのような原因が考えられるでしょうか?
ご教授お願いいたします.
追記
詳しい内容を捕捉します. 2021/5/25 8:15
画像は,gyazoという画像共有サービスのURLから呼び出しています.
呼び出しているURLは,https://i.gyazo.com/???.png のようなものです.
vis.jsを利用してcanvasに描画したネットワーク図のノードに,gyazoの画像を設定しています.
このような感じです↓(画像はvis.js公式ドキュメントより引用)
しかし,このcanvasをtoDataURL()をすると,
Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
というエラーがでています.
回答1件
あなたの回答
tips
プレビュー