Fabric.jsでcanvasの図形の座標やサイズや色などプロパティを取得
公開:
HTML5のcanvasでJavaScriptライブラリのFabric.jsを使用し、図形など要素(オブジェクト)の、座標やサイズや色などのプロパティを取得する方法です。
特にサイズはFabric.js特有のコツがあります。
要素の配置とデモ
先ずは下記初期値で図形を配置します。
var canvas = new fabric.Canvas('cvs');
var rect = new fabric.Rect({
left: 110, //左
top: 70, //上
width: 120, //幅
height: 80, //高さ
angle: 20, //角度
strokeWidth: 5, //線の幅
stroke: 'blue', //線の色
fill: 'royalblue' //塗潰し色
});
canvas.add(rect);
図形を、移動/拡縮/回転させてみてください。その都度変更された各値を表示させています。
拡縮させるときにつまむハンドルによっては left/top の座標が変わることがあります。左上の座標を基準にしているためです。回転の場合は常に変わります。
取得方法とコード例
要素(オブジェクト)の、座標/サイズ/角度/線の太さ/色は下記で取得できます。Math.round() はJavaScriptの持つ、四捨五入するオブジェクトです。
left = Math.round(rect.left); top = Math.round(rect.top); width = Math.round(rect.width * rect.scaleX); height = Math.round(rect.width * rect.scaleX); angle = Math.round(rect.angle); strokeWidth = rect.strokeWidth; stroke = rect.stroke; fill = rect.fill;
注意点として、width/heightは常に初期値が取得され、ユーザーがサイズ変更した後の値を取得できません。倍率のscaleXやscaleYをそれぞれに掛ける必要があります。
取得して表示する実際のコード例です。
//値取得と表示
function getProperty(){
$('textarea').text(
'left = ' + Math.round(rect.left) + '\n' +
'top = ' + Math.round(rect.top) + '\n' +
'width = ' + Math.round(rect.width * rect.scaleX) + '\n' +
'height = ' + Math.round(rect.width * rect.scaleX) + '\n' +
'angle = ' + Math.round(rect.angle) + '\n' +
'strokeWidth = ' + rect.strokeWidth + '\n' +
'stroke = ' + rect.stroke + '\n' +
'fill = ' + rect.fill
);
}
//変更されたときのイベント処理
canvas.on('object:modified', function(){
getProperty();
});
上記で挙げた以外にも数多くのプロパティがあります。機会があれば別の記事で書きたいと思います。
Web制作実験