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

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

新規登録して質問してみよう
ただいま回答率
85.59%
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回答

362閲覧

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

3

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

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

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

投稿2022/10/05 00:10

int32_t

総合スコア20141

nikuatsu, yambejp👍を押しています
maisumakunを押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

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

総合スコア113594

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.59%

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

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

質問する

同じタグがついた質問を見る

canvas

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

HTML5

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

JavaScript

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

HTML

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