canvasで、ctx.moveTo(startX, startY);ctx.lineTo(x, y);ctx.stroke();で線を描画します。canvas.toDataURL().replace(‘image/png’,’application/octet-stream’)で、画像をダウンロードします。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Canvas</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <style> #mycanvas{ border: 10px solid #999; cursor: crosshair; } .thumbnail{ border: 2px solid #999; margin-right: 5px; } </style> </head> <body> <h1>Canvas</h1> <p> <select id="penColor"> <option value="black">黒</option> <option value="red">赤</option> <option value="blue">青</option> <option value="white">白</option> </select> <select id="penWidth"> <option value="1">細</option> <option value="3">中</option> <option value="5">太</option> </select> <input type="button" id="erase" value="消去"> <input type="button" id="save" value="ギャラリーに追加"> </p> <canvas id="mycanvas" width="400" height="200"> Canvasの対応ブラウザを使用ください。</canvas> <div id="gallery"></div> <p> </p> <script> $(function(){ var canvas = document.getElementById('mycanvas'); if (!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); var startX, startY, x, y, borderWidth = 10, isDrawing = false; $('#mycanvas').mousedown(function(e){ isDrawing = true; startX = e.pageX - $(this).offset().left - borderWidth; startY = e.pageY - $(this).offset().top - borderWidth; }) .mousemove(function(e){ if (!isDrawing) return; x = e.pageX - $(this).offset().left - borderWidth; y = e.pageY - $(this).offset().top - borderWidth; ctx.beginPath(); ctx.moveTo(startX, startY); ctx.lineTo(x, y); ctx.stroke(); startX = x; startY = y; }) .mouseup(function() { isDrawing = false; }) .mouseleave(function(){ isDrawing = false; }); $('#penColor').change(function(){ ctx.strokeStyle = $(this).val(); }); $('#penWidth').change(function(){ ctx.lineWidth = $(this).val(); }); $('#erase').click(function(){ if(!confirm('本当に消去しますか?')) return; ctx.clearRect(0, 0, canvas.width, canvas.height); }); $('#save').click(function(){ var img = $('<img>').attr({ width: 100, height: 50, src: canvas.toDataURL() }); var link = $('<a>').attr({ href: canvas.toDataURL().replace('image/png','application/octet-stream'), download: new Date().getTime() + '.png' }); $('#gallery').append(link.append(img.addClass('thumbnail'))); ctx.clearRect(0, 0, canvas.width, canvas.height); }); }); </script> </body> </html>