Canvasユーティリティライブラリ Fabric.jsマニュアル
はじめにFabric.jsとは?
Fabric.jsは、Canvasアプリケーションの作成を容易にするためのライブラリです。Fabric.js は、不足しているオブジェクトモデル、svg パーサー、インタラクション、その他 Canvas に不可欠なツール一式を提供します。Fabric.jsは海外のフレームワークで、公式APIが雑多で充実しておらず、ドキュメントもほとんどが英語で、数も少ないので、この記事では、初心者がプロジェクトでFabric.jsを使いこなし、Canvasを描く過程を楽しめるようにすることを目的としています。
なぜFabric.jsを使うのか?
Canvasは良いCanvas機能を提供してくれますが、Apiはフレンドリーさが足りません。Fabric.jsはこのために開発されたもので、オブジェクトベースでコードを書くことができるのが特徴です。
Fabric.jsでできること
- キャンバス上にグラフィック(画像、テキスト、通常のグラフィック、複雑なパス合成のグラフィックを含む)を作成、充填します。
- グラデーションカラーでの塗りつぶし
- グラフィックを合成する(合成されたグラフィック、グラフィックテキスト、画像などを含む)。
- グラフィカルなアニメーションを設定する ユーザーとのインタラクションを設定する。
- JSON、SVGデータなどを生成する。
- 独自のドラッグ&ドロップ機能を持つCanvasオブジェクトを生成します。
スタート
VueプロジェクトにおけるFabric.jsの紹介
プロジェクトでES6とWebpackを使っていると仮定して、以下のようにFabric.jsを使い始めることができます。
1. コマンドラインから
npm install fabric (or yarn add fabric)
2. 持ち込む
.vue
ファイル
import { fabric } from 'fabric'
3. には
.vue
の単一ファイルでは
mounted:
ライフサイクルでFabric.jsの旅を始める
注意:デフォルトのfabric npmモジュールはかなり大きなパッケージを生成するので、Fabric.jsに不要と思われるパッケージがたくさんある場合、その場合は、ここかコマンドラインで独自のバージョンを構築してください。
グラフィックの描画
通常のグラフをプロットする
1. キャンバスの宣言
var canvas =new fabric.Canvas('main');
2. グラフィックの描画
var rect = new fabric.Rect({
left:100,// distance from the left side of the canvas in pixels
top:100,// distance from the top edge of the canvas
fill:'red',//the color of the fill
width:30,//the width of the square
height:30//height of the square
});
3. キャンバスにグラフィックを追加する
canvas.add(rect);
その他、通常のグラフィック。
-
正方形を描く
var rect = new fabric.
-
円を描く
var circle = new fabric.
-
三角形の描画
var triangle = new fabric.
不規則な図形を描く
パスで描画する。点と線の動きで描く。線、曲線、円弧を応用して非常に複雑な形状を描くことができます。
Path( )メソッドで、"M"は"Move"コマンドの略で、この"M 00" はブラシを点座標 (0,0) に移動させることを意味します。
L200100は、ペンで座標(0,0)から(200,100)まで線を引くことを意味します。
三角形を描画したら、set( )メソッドで三角形の位置、色、角度、透明度などのプロパティを設定することができます。
具体的なコードは以下の通りです。
var path = new fabric.Path('M 0 0 L 200 100 L 170 200 z');
path.set({ left: 120, top: 120,fill:'red' });
canvas.add(path);
画像に関する操作
HTMLによる画像の挿入
<body>
<canvas id="canvas" width='800' height='800'></canvas>
<img src=". /2.png" id="img">
</body>
---------------------
var canvas = new fabric.Canvas('canvas');// Declare canvas
var imgElement = document.getElementById('img');//Declare our image
var imgInstance = new fabric.Image(imgElement,{ //set the image position and look
left:100,
top:100,
width:200,
height:100,
angle:30//Set the clockwise rotation angle of the image
});
canvas.add(imgInstance);//add to canvas
JavaScriptによる画像の挿入
var canvas = new fabric.Canvas('canvas');
fabric.Image.fromURL('. /2.png', function(oImg) {
oImg.scale(0.1);//scale the image 10x
canvas.add(oImg);
});
インタラクション
キャンバスとのインタラクション
canvas.add(imgInstance);//add to canvas
var canvas = new fabric.Canvas('canvas');
canvas.on('mouse:down', function(options) {
console.log(options.e.clientX, options.e.clientY)
})
注)よく聞くイベントは以下の通りです。
-
mouse:down
: マウスが押されたとき -
mouse:move
: マウスが動いたとき -
mouse:up
: マウスを上げたとき
キャンバス上のオブジェクトに対する操作
var canvas = new fabric.Canvas('canvas');
var rect = new fabric;
rect.on('selected', function() {//selected listener event
console.log('selected a rectangle');
});
circle({ radius: 75, fill: 'blue' });
circle.on('selected', function() {
console.log('selected a circle');
});
canvas.add(rect);
canvas.add(circle);
注)一般的に使用されるリスナーイベントは以下の通り。
-
after:render
: キャンバス再描画後 -
object:selected
: オブジェクトが選択されている -
object:moving
: オブジェクトの移動 -
object:rotating
: 回転しているオブジェクト -
object:added
: オブジェクトが追加されたのは -
object:removed
: オブジェクトが削除されました
組合せ
新しい fabric.Group(): 2 つの引数を取ります: 結合されるオブジェクト名の配列と、結合されたオブジェクトの共通プロパティです。
var canvas = new fabric.Canvas('canvas');
var circle = new fabric.
radius: 100,
fill: '#f00',
scaleY: 0.5,
originX: 'center',//adjust the X-axis coordinates of the center
originY: 'center'//adjusts the center's Y-axis coordinates
});
Text('Hello World', {//draw text
fontSize: 30,
originX: 'center',
originY: 'center'
})
// Make a group
var group = new fabric.Group([circle, text], {
left: 150,
top: 100,
angle: 10
})
canvas.add(group);
シリアライズとデシリアライズ
シリアライズ
var canvas = new fabric.Canvas('canvas');
var rect = new fabric.
width: 100,
height: 100,
fill: 'red'
});
canvas.add(rect);
console.log(JSON.stringify(canvas.toJSON()));
デシリアライズ
var canvas = new fabric.Canvas('canvas');
canvas.loadFromJSON('{"objects":[{"type":"rect","left":50,"top":50,"width& quot;:20,"height":20,"fill":"green","overlayFill":null}')
SVG
var canvas = new fabric.Canvas('canvas');
var rect = new fabric.
width: 100,
height: 100,
fill: 'red'
});
canvas.add(rect);
canvas.toSVG();
参考ドキュメントです。 http://fabricjs.com/articles/
以上、本記事の全内容をご紹介しましたが、皆様の学習のお役に立てれば幸いです。また、Script Houseをより一層応援していただければ幸いです。
関連
-
amazeuiのページチェック機能を実装するためのコード
-
HTML5ジャンプアプレット wx-open-launch-weapp サンプルコード
-
4種類のプログラムの画面適応に応じたモバイルh5ページを説明する。
-
iPhoneXの画面適応 WeChatアプリとH5でセーフエリア下部の小さな黒いバー
-
Webフォント読み込み方式最適化のまとめ
-
HTML5 のタッチ イベント(touchstart、touchmove、touchend)の実装
-
QRコードポスター付きキャンバス生成の落とし穴記録
-
モバイル版Html5におけるBaidu地図のクリックイベント
-
透明度を変更するためのキャンバスピクセル処理コード
-
モバイル開発 HTML5 ボタンをクリックすると、ページがちらついたり、背景が黒くなったりする問題
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン