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

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

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

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

HTML5

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

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

424閲覧

Javascriptでcanvasに描画した画像をURLに変換・表示ができない、

TETETE

総合スコア0

canvas

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

HTML5

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

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2022/10/04 22:39

前提

Javascriptを使ってcanvasタグで画像を描画しました。

発生している問題・エラーメッセージ

canvasで描画した画像をtoDataURL()でURLに変換し、そのままそれをHTMLに表示させるようにしたかったのですが、うまくいきません。
画像を描画するところまではできるのですが、なぜか「保存」を押しても表示されないままになってしまいます。

該当のソースコード

html

1<style> 2 canvas { 3 position: relative; 4 border:1px solid #000; 5 } 6 7 div#img-box{ 8 border:1px solid #000; 9 width:500px; 10 } 11</style> 12<body> 13 <canvas id="canvassample" width="300px" height="300px"><img style="display: none;" id="media" alt="画像"></canvas> 14 <h2>画像出力<h2> 15 <div id="img-box"><img id="newImg"></div> 16 <div id="btn-box"> 17 <button type="button" onclick="chgImg()" value="1">保存</button> 18 </div> 19</body> 20 <script> 21 var canvas = document.getElementById('canvassample'), 22 ctx = canvas.getContext('2d') 23 24 var image = document.getElementById("media"); 25 26 image.src = "https://1.bp.blogspot.com/-WoPLgzbefuw/X-FcxFa-YjI/AAAAAAABdE0/42S9V3wWi400mGKLEiB_pQT-dqTKT28kwCNcBGAsYHQ/s400/onepiece14_enel.png"; 27 28 image.onload = ()=>{ 29 ctx.drawImage(image, 0, 0, 300, 300); 30 }; 31 32 33 function chgImg(){ 34 var png = canvas.toDataURL(); 35 36 document.getElementById("newImg").src = png; 37 } 38 </script>

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

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

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

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

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

int32_t

2022/10/04 22:44

ブラウザの開発者ツールのコンソールにエラーが出ていませんか。
TETETE

2022/10/04 23:48

はい!確かにエラーが出ていました! Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported. 調べてもあまり決定打になるような改善策は見つからなかったです、。
guest

回答2

0

Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

画像とキャンバスをオリジン間で利用できるようにする」に詳細が書かれています。

HTMLページと画像を同一のサーバで提供するか、サーバで画像のCORS設定を変更する必要があります。

投稿2022/10/05 00:10

int32_t

総合スコア20856

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

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

0

ご指定の画像自体がcorsにかかるわけじゃなさそうなので一旦fetchでblobに読んでおけばいけそうですね
ただし保存ボタンが「保存」として機能しているかどうかは別の話。

javascript

1<style> 2canvas { 3position: relative; 4border:1px solid #000; 5} 6div#img-box{ 7border:1px solid #000; 8width:500px; 9} 10#media{ 11display:none; 12} 13</style> 14<script> 15window.addEventListener('DOMContentLoaded', ()=>{ 16 const url="https://1.bp.blogspot.com/-WoPLgzbefuw/X-FcxFa-YjI/AAAAAAABdE0/42S9V3wWi400mGKLEiB_pQT-dqTKT28kwCNcBGAsYHQ/s400/onepiece14_enel.png"; 17 const canvas = document.querySelector('#canvassample'); 18 const ctx = canvas.getContext('2d'); 19 let png; 20 fetch(url).then(res=>res.blob()).then(x=>{ 21 const src=URL.createObjectURL(x); 22 media.onload = ()=>{ 23 ctx.drawImage(media, 0, 0, 300, 300); 24 png = canvas.toDataURL("image/png"); 25 }; 26 media.src = src; 27 }); 28 btn.addEventListener('click',()=>{ 29 newImg.src = png; 30 }); 31}); 32</script> 33 34 35<canvas id="canvassample" width="300px" height="300px"></canvas> 36<img id="media" alt="画像"> 37<h2>画像出力<h2> 38<div id="img-box"><img id="newImg"></div> 39<div id="btn-box"> 40<button type="button" id="btn" value="1">保存</button> 41</div>

投稿2022/10/05 02:45

yambejp

総合スコア114810

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問