var rect = new fabric.Rect(); // notice no options passed in
rect.getWidth(); // 0
rect.getHeight(); // 0
rect.getLeft(); // 0
rect.getTop(); // 0
rect.getFill(); // rgb(0,0,0)
rect.getStroke(); // null
rect.getOpacity(); // 1
Hierarchy and Inheritance
fabric.Object 是图像基类
你可以自己扩充方法
fabric.Object.prototype.getAngleInRadians = function() {
return this.getAngle() / 180 * Math.PI;
};
var rect = new fabric.Rect({ angle: 45 });
rect.getAngleInRadians(); // 0.785...
var circle = new fabric.Circle({ angle: 30, radius: 10 });
circle.getAngleInRadians(); // 0.523...
circle instanceof fabric.Circle; // true
circle instanceof fabric.Object; // true
Canvas
fabric.Canvas 是canvas的wrapper
var canvas = new fabric.Canvas('c');
var rect = new fabric.Rect();
canvas.add(rect); // add object
canvas.item(0); // reference fabric.Rect added earlier (first object)
canvas.getObjects(); // get all objects on canvas (rect will be first and only)
canvas.remove(rect); // remove previously-added fabric.Rect
经典的设计 有options 有对象方法
var canvas = new fabric.Canvas('c', {
backgroundColor: 'rgb(100,100,200)',
selectionColor: 'blue',
selectionLineWidth: 2
// ...
});
// or
var canvas = new fabric.Canvas('c');
canvas.setBackgroundImage(http://...');
canvas.onFpsUpdate = function(){ /* ... */ };
var canvas = new fabric.Canvas('c');
var imgElement = document.getElementById('my-image');
var imgInstance = new fabric.Image(imgElement, {
left: 100,
top: 100,
angle: 30,
opacity: 0.85
});
canvas.add(imgInstance);
Fabric.js 简单介绍和使用
背景
前段时间,产品突然拿着美图秀秀自由拼图模块找到我说,要做一个一模一样的功能,来分享图片。顿时我心中有千万头草泥马奔向产品。不过静下来,认真的在网上翻了翻前人经验,突然发现了一个非常好用的第三方插件,完全可以满足这个功能。话不多说,下面我们就来介绍一下,这个插件的基本功能。
前言
canvas提供一个好的画布能力, 但其api超级烂。如果你就想画个简单图形, 其实也可以, 不过做一些复杂的图形绘制, 编写一些复杂的效果,就不是那么好了。fabric就是为此而开发。
常用功能简介
画正方形代码
如果我们想重新调整位置 怎么办
objects
fabric.Circle
fabric.Ellipse
fabric.Line
fabric.Polygon
fabric.Polyline
fabric.Rect
fabric.Triangle
画一个三角形 和一个 圆形
Manipulating objects
可以简单的使用set来控制对象属性
get
Hierarchy and Inheritance
fabric.Object 是图像基类
你可以自己扩充方法
Canvas
fabric.Canvas 是canvas的wrapper
经典的设计 有options 有对象方法
Images
当然也可以通过url加载一张图片到canvas
可以对加载的图片进行预处理
实现拼图
开发中遇见的问题
1. 去边框问题
如上图,单独对某张图片进行调整的时候,会出现上面的框,如不点击当前 canvas 空白处,则边框不会取消。canvas.toDataURL()保存图片的时候,操作边框也同样被保留下来。
解决这个问题,可以在将 canvas保存为图片的操作处(笔者是一个保存button),同事操作下面的代码:
2. 图片跨域
看似都完成了,但是却忽略了一个重要的问题。
此时我们需要做的是,
图片处于同源的或者需要图片服务器添加Access-Control-Allow-Origin: *
更多方法请参考