こんにちは。内藤です。
HTML5でアプリを作成する場合、画像は予め 用意されたpngファイルをそのまま表示することが普通で、アプリ側でエフェクトをかけたりすることはあまりありません。けれども、HTML5のCanvasを使うことでアプリ内で画像を作成する機能は作れるので、ここでは作った画像を画像ファイルとして扱い、保存する部分までの実装方法について説明します。
これを応用すれば、アプリで作成した画像をメールで転送したり、サーバーにアップロードしたり、といったことも可能です。
内部的には、JavaScriptでバイナリを扱うArrayBufferオブジェクトが登場しますので、これの使い方も参考にして下さい。
まずは、Monacaから最小限のアプリを作り、JS/CSSコンポーネントよりjQuery(Monaca version)を入れておきます。
次のリストによりお絵描き機能を完成させます。
index.html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, user-scalable=no">
<script src="components/loader.js"></script>
<link rel="stylesheet" href="components/loader.css">
<link rel="stylesheet" href="style.css">
<script>
window.addEventListener('load',onLoad,false);
function onLoad() {
var width = $("body").width();
var height = $("body").height();
$("#my-canvas").attr("width",width-20);
$("#my-canvas").attr("height",height-60-100);
$(".buttons").height(100);
$(".buttons").css("top",height-100);
$(".mybutton").width( (width-44)/3 );
$(".mybutton").height( 100 );
var myCanvas = $("#my-canvas").get(0);
var myContext = myCanvas.getContext("2d");
myContext.strokeStyle = "red";
myContext.lineWidth = 5;
var startX = 0;
var startY = 0;
var offsetLeft = $("#my-canvas").offset().left;
var offsetTop = $("#my-canvas").offset().top;
$("#my-canvas").on("touchstart",function(event){
event.preventDefault();
var pageX = event.originalEvent.touches[0].pageX;
var pageY = event.originalEvent.touches[0].pageY;
startX = pageX - offsetLeft;
startY = pageY - offsetTop;
});
$("#my-canvas").on("touchmove",function(event){
var pageX = event.originalEvent.touches[0].pageX;
var pageY = event.originalEvent.touches[0].pageY;
var endX = pageX - offsetLeft;
var endY = pageY - offsetTop;
myContext.beginPath();
myContext.moveTo(startX,