Fabricjs – 基礎物件繪製 #Day2

上一篇我們繪製過一個方塊,當作範例,讓我們來繪製更多圖案吧~!!
Fabricjs 在繪製之前,記得要對畫布做宣告,在上一篇也有寫過~沒忘記吧!!

var canvas =new fabric.Canvas(‘main’); // 要使用id=”main” 的 canvas 標籤

我們先準備HTML,引用JS就到fabricjs官方下載囉!

<body>
    <canvas id="main"></canvas>
<script>
var canvas =new fabric.Canvas('main'); // 要使用id="main" 的 canvas 標籤
......
</script>
</body>

Fabricjs提供以下可以物件可以建立

  • 直線(Line)
  • 圓形(Circle)
  • 三角形(Triangle)
  • 方型(Rect)
  • 橢圓(Ellipse)
  • 折線圖(Polyline)
  • 多邊形(Polygon)
  • 不規則圖形(Path)
  • 文字(Text)
  • 可編譯文字(IText)
  • 圖片(fabric.Image)

以下介紹基本繪製方式。

1.直線

Fabricjs 提供兩個座標(x1,y1)(x2,y2) => [x1,y1,x2,y2] 會連成一直線,想像中需以(0,0)座標為出發點,不需管最後要放在畫面的哪裡,放哪裡由 left 和 top 控制囉。

var myLine = new fabric.Line([50, 50, 200, 100], {
  stroke: 'blue',
  strokeWidth: 2, // 必有欄位
  top: 60,
  left: 30
})
canvas.add(myLine )

2.圓形:

提供半徑(radius)就可以繪製出一個圓了

var circle = new fabric.Circle({
left: 100,  //左邊距離px
top: 100, //上方距離 px
radius: 20, //半徑px
fill: 'green'  //填色
});
canvas.add(circle); //新增至畫布

3.三角形:

如果要正三角,寬高給一樣就會是正三角形,不然都會是等腰三角形,如果忘記什麼是等腰三角形,國小數學老師會哭的。

var triangle = new fabric.Triangle({
left: 100,  //左邊距離px
top: 100, //上方距離 px
width: 20,  //寬
height: 30,  //高
fill: 'blue' //填色
});
canvas.add(triangle ); //新增至畫布

4.方形:

方形就是提供很明顯的就是提供寬跟高 ,結束。

var rect = new fabric.Rect({
    left:100,//左距離 px
    top:100,//上距離px
    fill:'red',//填色
    width:30,//寬
    height:30//高
 });
canvas.add(rect); //新增至畫布

5.橢圓形

橢圓形與圓形差別在於不是提供半徑,而是提供上下彎(ry)的高度與左右彎(rx)的寬度。

  canvas.add(new fabric.Ellipse({
    left:100,//左距離 px
    top:100,//上距離px
    fill:'red',//填色
rx: 20, //左右寬度
ry: 40//上下高度
  }));

6. Polyline(折線) & Polygon(多邊)

多邊形與折線圖,這兩個目前使用起來,繪製出來的效果我只能說是一模一樣,目前尚未知道差異在哪裡,如果有人知道,歡迎在底下留言跟我說下,感謝囉。

多邊形與折線圖都是提供多個座標,fabric會把所有座標依序連結起來,再把頭尾也連結起來形成一個圖形。

//座標位置
  var points = [
    {x:10,y:10},
    {x:15,y:15},
    {x:30,y:15},
    {x:40,y:10},
    {x:30,y:0},
    {x:-10,y:-10}
  ];

  canvas.add(new fabric.Polyline(points, {
    left:100,//左距離 px
    top:100 //上距離px
  }));

  canvas.add(new fabric.Polygon(points, {
    left:200,//左距離 px
    top:100 //上距離px
  }));

7.不規則圖形

不規則徒刑 path 是參照 SVG的繪製的語法,如果要學會怎麼畫,可以先去研究SVG,或者將圖片上傳到有提供SVG轉檔的網站囉。

//path 是參照 SVG的畫法
var path = new fabric.Path('M 0 0 L 200 100 L 170 200 z',
{ 
left: 100,  //左邊距離px
top: 100, //上方距離 px
fill: 'blue' //填色
}
); 
canvas.add(path);

7. 文字

文字很簡單,只要提供,文字與座標

canvas.add(new fabric.Text('hello world', { left: 100, top: 100 }));

8.可編輯的文字

同上(懶),只是將Text => IText

canvas.add(new fabric.IText('hello world', { left: 100, top: 100 }));

9.圖片

圖片引用方式有兩種

  • URL
  • img標籤
//HTML
<canvas id="main"></canvas>
<img src="my_image.png" id="my-image">
// JS
var canvas = new fabric.Canvas('main');
var imgElement = document.getElementById('my-image');
var imgInstance = new fabric.Image(imgElement, {
  left: 100,
  top: 100,
  angle: 30,
  opacity: 0.85
});
canvas.add(imgInstance);

使用Url做建立

//相對路徑
fabric.Image.fromURL('my_image.png', function(oImg) {
  canvas.add(oImg);
});
//絕對路徑
fabric.Image.fromURL('https://www.myweb.con.tw/my_image.png', function(oImg) {
  canvas.add(oImg);
});

以上就是基本的Fabric繪圖物件的基本使用方式囉,我們下次見,掰。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *