さて,スクリプト全文です.
細かい装飾や表示位置は自分で変更してみてください.
<!DOCTYPE html> <html> <head> <title>camera paint</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"> <!-- metaタグで スマホの挙動を制限している --> <script src="megapix-image.js"></script><!-- 外部の便利なライブラリを読み込んでいる --> </head> <body> <h1>camera</h1> カメラを起動,又は写真を選択<br> <input type="file" accept="image/*" capture="camera" id="mycam" onchange="myCamera(mycam)"/> <br> <canvas id="myCanvas" style="border:1px solid #000000;"></canvas> <script type="text/javascript"> var canvas; var camCanvas; var paintSwitch = false; var oldX = 0; var oldY = 0; var myColor = "rgb(255,0,0)";//色を動的に変えられるようにするために変数宣言しちゃう var myLine = 0; //---スマホのOS取得 var ua = navigator.userAgent;//User Agent(まぁ機種名みたいなの)を取得して変数uaに代入しなさい //--- //以下iPhoneの時の挙動 if (ua.indexOf("iPad") >= 0 || ua.indexOf("iPhone") >= 0 || ua.indexOf("iPod") >= 0){ //特に挙動はまだ決めていない } //以下Androidの時の挙動 if (ua.indexOf("Android") >= 0){ //特に挙動はまだ決めていない } //--------- window.onload = function() {//これ読み込んだ時に,,, syokika();//syokikaを実行してね } function syokika(){//で,これがsyokikaね canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d"); //--ここからスマホのタッチの挙動<−NEW!! canvas.addEventListener("touchmove",myTouchDraw,false); canvas.addEventListener("touchstart",myTouchStart,false); canvas.addEventListener("touchend",myTouchEnd,false); } //--タッチの挙動ここから function myTouchStart(atai){ paintSwitch = true; oldX = atai.touches[0].pageX - canvas.offsetLeft;//オフセット(ずれ)の修正=よこ oldY = atai.touches[0].pageY - canvas.offsetTop;//オフセット(ずれ)の修正=たて } function myTouchEnd(){ paintSwitch = false; } //--タッチの挙動ここまで //--カメラの画像 function myCamera(mycam){ var myFile = mycam.files[0]; new MegaPixImage(myFile).render(myCanvas, { width : 300}); } //--カメラの画像処理ここまで function myWidth(myWidth){ myLine = myWidth; } function myTouchDraw(atai) { if (!paintSwitch) return; atai.preventDefault();//これすると縦スクロールがなくなる var x = atai.touches[0].pageX - canvas.offsetLeft;//なんかタッチの場合はpageXじゃないとだめ var y = atai.touches[0].pageY - canvas.offsetTop;//なんかタッチの場合はpageYじゃないとだめ var context = canvas.getContext("2d"); context.strokeStyle = myColor;//色は動的に変えられるように変数にすちゃったよね context.lineWidth = myLine;//線の太さ context.beginPath();//線を描き始めます context.moveTo(oldX, oldY);//この点から context.lineTo(x, y);//この点まで context.stroke();//描いてね context.closePath();//線はここまで oldX = x; oldY = y; } function myRed(){ myColor = "rgb(255,0,0)"; } function myGreen(){ myColor = "rgb(0,255,0)"; } function myBlu(){ myColor = "rgb(0,0,255)"; } function myYel(){ myColor = "rgb(255,255,0)"; } function myGray(){ myColor = "rgb(128,128,128)"; } function myBlack(){ myColor = "rgb(0,0,0)"; } //---画像に変換ボタンを押すとここにfunctionが実行される function screenshot(){ var myimage = canvas.toDataURL(); //以下iPhoneの時の挙動 上の方で機種をグローバル変数uaに入れてあるのでifで機種が分かる if (ua.indexOf("iPad") >= 0 || ua.indexOf("iPhone") >= 0 || ua.indexOf("iPod") >= 0){ document.getElementById("newImg").src = myimage;//newImgeというIDを探してPNG入れてね } //以下Androidの時の挙動 上の方で機種をグローバル変数uaに入れてあるのでifで機種が分かる if (ua.indexOf("Android") >= 0){ //androimageというiDがあるimgタグのソース(URL入れるところ)に入れちゃう document.getElementById("androimage").src = myimage; } } //--- </script> <form> <input type="button" value="RED" onclick="myRed()"> <input type="button" value="GREEEN" onclick="myGreen()"> <input type="button" value="BLUE" onclick="myBlu()"> <input type="button" value="YELLOW" onclick="myYel()"> <input type="button" value="GRAY" onClick="myGray()"> <input type="button" value="BLACK" onClick="myBlack()"> </form> </ br> <pre> 線の太さ<input id="myRange" value="1" type="range" max="10" min="1" step="0.1" onChange="myWidth(this.value)" /> </pre> <hr> <form> <input type="button" value="画像に変換" onclick="screenshot()"> <!-- onclickでscreenshotというfunction実行してね --> </form> <div><img id="newImg"></div> <!-- iPhone用です このDIVのIDを探してここに画像を入れる --> </ br> <img src="" id="androimage" border="1"><!-- Androidの時の画像保存用 --> <pre> 画像を長押しして保存 </pre> </body> </html>