ホーム‎ > ‎HTML5 いろいろ‎ > ‎

HTML5 Canvas・お絵かき編

2009/11/23-2010/03/04

HTML5 の Canvas と JavaScript を使って簡単なお絵かきをしてみる。


 はじめの一歩・マウスイベントを拾って描画する


TestCanvasMouseEvent01.html (2010/03/04 HTML5)
HTML5 Canvasのサンプル で紹介しているサンプル。
内容は簡単な塗り絵のサンプルです。マウスでドラッグすると描画します。


HTML/JavaScriptでは部品やマウスの座標がややこしくなります・・・Google 検索で「div、座標」ぐらいで検索してみてください。div の座標を得るあたりからややこしくなる。


TestCanvas_Paint01.html (2010/03/04 HTML5)
上のサンプルに画像消去ボタンやデバッグ表示のテキストエリアをつけたもの。


描画のずれをなくすため、Canvas をウインドの左上 (0,0) につめています。また、ウインドのスクロールを禁止にしています。
これを土台にしていろいろ足してみます。


 筆の色を変えられるようにしてみる


JavaScriptボタン入力処理 で紹介している TestJS色選択1_1.html を上のサンプルに付け足してみます。

TestCanvas_Paint02.html (2010/03/04 HTML5)



 さらに付け足す


サンプル: TestCanvas_Paint05.html (2010/03/04 HTML5)
筆の太さも変えてみる。


ちょっと動作が重い。点ではなくて線で結んだ方がよさそう。
ツールパネルも一応ドラッグ移動できるのだけど、色パレットを表示しているときはとても重く、タブ3のときは軽くなる。
PC とブラウザの処理能力のベンチマークになるかも?。
色選択は、プログラム生成せずカラーパレットの画像を何枚か用意して、カーソル座標の色を拾うようにした方がてっとり早いという話もある・・・。

筆のぼかしもつけてみるか?。

描画情報(軌跡やペンの設定など)を記録し、履歴の画像バッファを何枚か用意すると、undo などの操作もできる。ただまあ、理屈は簡単だけど、やるのは面倒くさい・・・。


 その他いろいろ


◎ツールパネルをタブ切り替え式にするには?
こちらにいい資料がある。
All About:ページ移動せずに内容を変更するタブを作る
項目がいっぱいあるツールメニューもわりと簡単にできそう。

JavaScript マウス入力処理
div のドラッグ移動とタブ切り替えのサンプル。


◎番外編:画像を保存するには?。
Firefox で Canvas の部分で右クリックメニューを出すと「名前を付けて画像を保存」などのメニューがある。ただま、Canvas上で右クリックするとこれも描画してしまう・・・、いい方法を考えてください。


◎ファイルの読み書きが鬼門
JavaScript はブラウザ上で動く関係で、ローカルファイルの読み書きが難点です。ファイルのアップロードのダイアログはあるけど、ブラウザ上には読めないとか (Firefoxを除く)、ユーザが手動で操作する明示的なファイルの保存方法がややこしくなるなど。


◎ネイティブでサポートするフィルターがあると便利かも。
HTML5 Canvas にコンボリューションフィルター(行列フィルター)をネイティブで処理する API があると便利。ちょっとしたレタッチぐらいまでは Web上でできてしまうかもしれない。
コンボリューションフィルターとは何ぞや?
Java 画像処理・フィルター編 に説明があります。


◎HTMLソースファイルを分割するには?
ここで悩む。HTMLファイルを適度な部品の単位で分割したいのだが、いい方法が分からない・・・。js や css は分割できるのだけど、HTML 自体をツールパネルなど適当な単位で分割したい。このあたりは、JavaやC# など本格的な言語と比較するとかなり面倒くさい。そのままだと、ソースの使いまわしのしにくい巨大なスパゲティプログラムになりやすい。
HTMLファイルの分割


◎上の話を本格的にお絵かきツールにしたもの
http://mugtug.com/sketchpad/
Sketchpad という HTML5 Canvas を使ったお絵かきツールが紹介されている。
いろいろな種類の筆やUndo 機能もついている。ブラウザの制約で画像ファイルの読み書きだけ難点があるのだけど、それ以外はかなり本格的。
Firefox や Safari では透過度つきの半透明の div が使える。





最近の更新

お品書き


TyoiWikiエディタ(C#)

C#
C# いろいろ
C#のプログラムを動かす方法
C# はじめの一歩
C# GUIはじめの一歩
C# ファイルの処理
C# XHTMLをDTD検証つきで読む
C# XMLシリアライズのサンプル
C# スレッドの処理
など

HTML
HTML はじめの一歩
CSS はじめの一歩
XHTML W3C検証ツールでチェック
HTML 次の一歩
HTMLもXMLフォーマットにすると便利かも
HTML 文書レイアウトサンプルツール
HTML 文書レイアウトサンプル
HTML 画面の構成画素数のサンプル
HTML divサンプル
HTML div floatサンプル
HTML div absoluteサンプル
HTML tableサンプル
HTML CSSメニューサンプル
HTML いろいろ
SVG サンプル
SVG いろいろ
フォントいろいろ
ディスプレイの解像度と構成画素数

JavaScript
JavaScript いろいろ
JavaScript はじめの一歩
JavaScript 文字処理とノードの操作
JavaScript ボタン入力処理
JavaScript マウス入力処理
JavaScript データ入力処理
JavaScript タイマー処理
JavaScript その他のサンプル
JavaScript 色分けの日本地図

HTML5 Canvas
HTML5 いろいろ
HTML5 Canvas サンプル
HTML5 Canvas データ読み取り
HTML5 Canvas グラフ編
HTML5 Canvas お絵かき編
HTML5 Canvas 画像処理・アフィン変換

MS JScript
JScript いろいろ
JScript はじめの一歩
JScript テキストの処理
JScript XMLとHTMLの処理

Silverlight
Silverlight いろいろ
Silverlight はじめの一歩
Silverlight 画像に効果をつける
Silverlight 画像の変形・回転・平行移動
Silverlight アフィン変換で2Dゲームの土台
Silverlight 一点透視図法によるグラフィクス
XAMLサンプル

Java
Java いろいろ
Java のプログラムを動かす方法
Java Swing はじめの一歩
Java 画像の表示
Java 画像処理・フィルター編
Java 画像の変形・回転・平行移動
Java 一点透視図法によるグラフィクス
など

JavaFX
JavaFX いろいろ
JavaFX はじめの一歩

各言語の比較サンプル
各種言語で画像を回転させる

その他
落書きなどいろいろ