前提・実現したいこと
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の画像は切り替えられる処理を書いています。文字も同様です。
あなたの回答
tips
プレビュー