問題点
<canvas> タグ内の画像を PNG 出力する方法は分かるのですが
HTML 上で変更された DIV Box を canvas に描かせて
その内容を先ほどと同様に PNG 出力すると
うまく行きません。
正しい方法をご指導下さい。
参照したコード**
(1) 基本骨格に使用
http://www.pori2.net/html5/Canvas/150.html
(2) HTML から SVG 作成の部分を借用
https://qiita.com/haribote/items/b17d46b9679ce2fb2712
一発芸!SVGでHTMLを画像化する
---**
うまく行く部分のコード**
コード <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"> </head> <body> <section class=""> <canvas id="cv1" width="360" height="240"> </canvas> <form> <input type="button" value="change color" onclick="chgCol()"> <input type="button" value="convert image" onclick="chgImg()"> </form> <div> <img id="newImg"> </div> </section> <script> var cvs = document.getElementById("cv1"); var ctx = cvs.getContext("2d"); //canvas .. draw random color stripes function chgCol() { for ( var i = 0 ; i < 9 ; i++ ) { var r = Math.floor(Math.random()*256); var g = Math.floor(Math.random()*256); var b = Math.floor(Math.random()*256); ctx.fillStyle = "rgb(" + r + "," + g + "," + b + ")"; ctx.fillRect( 40*i, 0, 40, 240 ); } } //canvas data to other image format function chgImg() { var pngData = cvs.toDataURL() ; document.getElementById("newImg").src = pngData ; } // ref: http://www.pori2.net/html5/Canvas/150.html // // toDataURL(imgage/png) = toDataURL() // toDataURL(image/svg+xml) // toDataURL(image/jpeg) </script> </body> </html>
---**
合成したら動かないコード**
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"> <script> function changeColor() { document.getElementById("box01" ).style.backgroundColor = "orange" ; } </script> </head> <body> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 380" width="460" height="380"> <style> .w00 { width: 100px; } .h00 { height: 50px; } .green0 { background-color: green ; } .blue3 { background-color: lightblue; } .wrap3 { padding: 15px ; } </style> <g> <foreignObject width='100%' height='100%' > <div xmlns="http://www.w3.org/1999/xhtml"> <section class="wrap3 "> <div id="box01" class="w00 h00 green0 " > </div> <div id="box02" class="w00 h00 blue3 " > </div> </section> </div> </foreignObject> </g> </svg> <br> <button class= " " onclick= "changeColor() " > change color </button> <section class=""> <form> <input type="button" value="convert image" onclick="chgImg()"> </form> <div> <img id="newImg"> </div> </section> <footer> <script> //canvas data to other image format const canvasEl = document.getElementById('canvas'); function chgImg() { let pngData = canvasEl.toDataURL() ; document.getElementById("newImg").src = pngData ; } </script> </footer> </body> </html>
よろしくお願いいたします。