やりたい事
タイトルに書かせていただいています通り、画像を表示するために使用したcanvasとその上に線を引くために使用したcanvasの二つを一つのcanvasに合成したいのですがうまく表示する事ができません。
php
1show.blade.php 2 3 @foreach($maps as $map) 4 <span class="show__img__no"> 5 NO:{{$loop->iteration}} 6 </span> 7 <div class='show__img__clear'> 8 <button class='btn-primary' id="clear-button{{$loop->iteration}}"><span>NO:{{$loop->iteration}}を削除</span></button> 9 </div> 10 11 12 <div class="show__img__map" id="canvas_container"> 13 <form action="#" > 14 <input type="hidden" id='pass{{$loop->iteration}}' value="{{asset($map->path)}}" class="img_pass"> 15 <input type="hidden" id='count' value="{{$loop->count}}" class="img_pass"> 16 </form> 17 18 <canvas id='CanvasMap{{$loop->iteration}}' ></canvas>//画像を表示する 19 <canvas id="CanvasDraw{{$loop->iteration}}"></canvas>//線を表示する 20 <canvas id="Image{{$loop->iteration}}" style="display: none;"></canvas>//合成用のcanvas 21 22 23 24 </div> 25 26 @endforeach
javascriptのファイルは以下になります。
javascript
1 document.querySelector("#submit").addEventListener("click", ()=>{ 2 concatCanvas(`Image${step}`,[`#CanvasMap${step}`,`#CanvasDraw${step}`]); 3 }); 4 5 //複数のcanvasを一つのcanvasに統合する 6 async function concatCanvas(base,asset){ 7 8 const can = document.getElementById(base); 9 10 const ctx = can.getContext("2d"); 11 12 for(let i=0; i<asset.length; i++){ 13 const image1 = await getImagefromCanvas(asset[i]); 14 15 16 ctx.drawImage(image1, 0, 0, can.width, can.height); 17 } 18 } 19 20 function getImagefromCanvas(id){ 21 return new Promise((resolve, reject) => { 22 const image = new Image(); 23 const ctx = document.querySelector(id).getContext("2d"); 24 25 image.onload = () => resolve(image); 26 image.onerror = (e) => reject(e); 27 image.src = ctx.canvas.toDataURL('image/jpeg'); 28 29 }); 30 }
しかしこのjavasriptのコードでは合成後、画像が真っ黒に表示されてしまいます。
やった事
[HTML5] 複数のCanvasを合成する
https://blog.katsubemakito.net/html5/canvas-concat
を参考にコードを書きました。
getImagefromCanvs関数内のimage.srcに直接画像パスを入力するようにすると逆にlineが表示できないといった問題に当たりました。
仮定
表示しようとしている画像データが大きすぎる?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/30 13:23
2020/06/30 13:33
2020/06/30 14:13 編集
2020/07/01 03:47