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

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

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

0回答

1855閲覧

canvasで複数画像を重ねた上に文字を書き込みたい

Nano422

総合スコア3

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グッド

2クリップ

投稿2019/08/22 08:01

編集2022/01/12 10:55

前提・実現したいこと

canvasにて、画像三枚を重ねた上に文字を2か所入れたい。
入れる2か所は場所は固定でinputで入れる文を別々に変えれるように実装しています。

発生している問題

テキストを片方だけ実装した状態なら上手く表示できたにもかかわらず、2か所にしたらテキストが表示されないうえに、画像の表示までバグった。
使用している画像は一番下から『Basa64』『png』『png』です。文字は縦書きにするため、関数をお借りしてきています。(var verticalのところ)

該当のソースコード

html

1<div id="canvas_box"> 2 <div id="c_container"> 3 <canvas id="canvas" width="960" height="540"> 4 <script> 5 var data = localStorage.getItem("img") + ''; 6 7 var left_com_src = "/static/img/left_com/main/left_com_1.png"; 8 var right_com_src = "/static/img/right_com/main/right_com_1.png"; 9 10 var left_text_src; 11 var right_text_src; 12 13 var source = [ 14 data, 15 right_com_src, 16 left_com_src 17 ]; 18 19 var vertical = function (context, text, x, y) { 20 var textList = text.split('\n'); 21 var lineHeight = context.measureText("あ").width; 22 textList.forEach(function (elm, i) { 23 Array.prototype.forEach.call(elm, function (ch, j) { 24 context.fillText(ch, x - lineHeight * i, y + lineHeight * j); 25 }); 26 }); 27 }; 28 29 window.onload = canvas(); 30 31 function left_com(id) { 32 left_com_src = "/static/img/left_com/main/left_com_" + id + ".png"; 33 source[1] = left_com_src; 34 canvas(); 35 } 36 37 function right_com(id) { 38 right_com_src = "/static/img/right_com/main/right_com_" + id + ".png"; 39 source[2] = right_com_src; 40 canvas(); 41 } 42 43 function left_text(id) { 44 left_text_src = document.getElementById(id).value; 45 canvas(); 46 } 47 48 function right_text(id) { 49 right_text_src = document.getElementById(id).value; 50 canvas(); 51 } 52 53 function canvas() { 54 var container = document.getElementById("c_container"); 55 var canvas = document.getElementById("canvas"); 56 var context = canvas.getContext("2d"); 57 context.font = "45px 'MS ゴシック'"; 58 59 var images = []; 60 for (var i in source) { 61 images[i] = new Image(); 62 images[i].src = source[i]; 63 images[i].onload = (function (index) { 64 return function () { 65 context.drawImage(images[index], 0, 0); 66 } 67 }(i)); 68 } 69 70 } 71 </script> 72 </canvas> 73 </div>

試したこと

文字書き込み処理の場所などを変えてみましたが上手く動きません。
以下のコードは縦文字書き込みスクリプトを呼び出すもので、canvas()のなかのforの中のonloadに入れていました。

js

1vertical(context, text, x, y);

これで文字を書き込めます。textに書き込みたい文を代入すれば表示されます。xとyは軸です。

###補足
pngの画像は切り替えられる処理を書いています。文字も同様です。

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

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

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

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

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

x_x

2019/08/22 09:21

vertical はどこで呼び出しているのでしょうか?
Nano422

2019/08/22 09:25

試したことの所に、コードを挿入する前の状態と書いたのですが、文章が伝わりずらかったかもしれません。失敗したときはcanvas()のforの中に入れてはいたのですが、それで挙動がおかしくなったのでそこから抜きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問