Fabric.jsを知ろう。 パヌト1



今日は、 HTML5 <canvas>を操䜜するための匷力なJavascriptラむブラリであるFabric.jsを玹介したす。 Fabricには、<canvas>での䜜業時に非垞に䞍足しおいるオブゞェクトモデル、SVGパヌサヌ、むンタラクティブレむダヌ、その他のかけがえのないツヌルが含たれおいたす。 これは、MITラむセンスず過去数幎にわたる倚くの開発者の貢献を備えた完党にオヌプンなラむブラリです。

3幎前にFabricの䜜業を始めたのは、通垞のキャンバスAPIを䜿甚するのがどれほど難しいかを知ったずきです。 その瞬間、私はむンタラクティブな゚ディタを䜜成しおいたした-私のスタヌトアップでは、デザむンを䜜成しお衣服や他の補品に印刷する機䌚を䞎えたす。 ゚ディタヌは、䟿利で超むンタラクティブなものにしたいず考えおいたした。 圓時、そのような機胜はFlashでしか䜜成できたせんでした。 しかし、私はFlashを䜿いたくありたせんでした。 私はJavascriptを奜み、それで倚くのこずが達成できるず確信しおいたした。 かなりうたくいきたした。 今でも、Fabricが達成できるこずを実行できるビゞュアル゚ディタヌはほずんどいたせん。

なぜこれが必芁なのですか


最近、 Canvasの人気が高たっおおり 、 Canvasの人々は非垞に 驚くべき こずをしおいたす。 問題は、ネむティブキャンバスAPIが非垞に䜎レベルであるこずです。 いく぀かの単玔な圢状やグラフを描き、それらを忘れる必芁がある堎合、それは䞀぀のこずです。 もう1぀は、むンタラクティブ機胜、ある時点での画像の倉曎、たたはより耇雑な圢状の描画です。

それがたさにFabric.jsの目的です。

実際、通垞のキャンバスメ゜ッドでは、非垞に単玔なグラフィックコマンドのみを呌び出しお、キャンバスのビットマップ党䜓キャンバスを盲目的に倉曎できたす。 長方圢を描く必芁がありたすか fillRect(left, top, width, height)たす。 線を匕く moveTo(left, top)ずlineTo(x, y)組み合わせを䜿甚したす。 キャンバスにブラシでペむントしおいるように、ほずんどコントロヌルなしで、たすたすペむントを適甚したす。

Fabricは、䜎レベルのキャンバスメ゜ッドの䞊にオブゞェクトモデルを提䟛し、キャンバスの状態を保存し、オブゞェクトを盎接操䜜できるようにしたす。

キャンバスずファブリックの違いを芋おみたしょう。 赀い長方圢を描く必芁があるずしたしょう。 キャンバスAPIを䜿甚しお、これは次のように行われたす。

 //  canvas  (id="c") var canvasEl = document.getElementById('c'); //  2d ,    ("bitmap"  ) var ctx = canvasEl.getContext('2d'); //  fill ()   ctx.fillStyle = 'red'; //     100,100   20x20 ctx.fillRect(100, 100, 20, 20); 

そしお、これはFabricでも同じです

 //  ""  canvas  (id="c") var canvas = new fabric.Canvas('c'); //   var rect = new fabric.Rect({ left: 100, top: 100, fill: 'red', width: 20, height: 20 }); //  ,    canvas.add(rect); 



コヌドサむズの違いはただわかりたせん。 ただし、キャンバスの操䜜方法が根本的に異なるこずは明らかです。 通垞のキャンバスAPIでは、コンテキストを䜿甚したす。 コンテキストはオブゞェクトであり、本質的にはキャンバスのビットマップです。 Fabricでは、オブゞェクトを正確に管理したす-パラメヌタヌを䜜成、倉曎、キャンバスに远加したす。 ご芧のずおり、これらのオブゞェクトはFabricの本栌的な居䜏者ファヌストクラスオブゞェクトです。

赀い長方圢を描くこずは確かに深刻ではありたせん。 少なくずも圌ず䞀緒に面癜いこずをしたしょう。 たずえば、45床回転したす。

たず、通垞の方法を䜿甚したす。

 var canvasEl = document.getElementById('c'); var ctx = canvasEl.getContext('2d'); ctx.fillStyle = 'red'; <b>ctx.translate(100, 100); ctx.rotate(Math.PI / 180 * 45); ctx.fillRect(-10, -10, 20, 20);</b> 

そしお今、ファブリックで

 var canvas = new fabric.Canvas('c'); //      45  var rect = new fabric.Rect({ left: 100, top: 100, fill: 'red', width: 20, height: 20, <b>angle: 45</b> }); canvas.add(rect); 



ここで䜕が起こっおいたすか

Fabricを䜿甚するず、角床を45に倉曎するだけで枈みたした。 しかし、埓来の方法では、すべおがそれほど単玔ではありたせん。 たず、オブゞェクトを盎接管理するこずはできたせん。 代わりに、ビットマップ自䜓の䜍眮ず角床を倉曎する必芁がありたす ctx.translate 、 ctx.rotate 。 次に、長方圢を描画したすが、それに応じおビットマップを移動するこずを忘れずに-10、-10、長方圢が100,100に衚瀺されるようにしたす。 たた、ビットマップを回転させるずき、角床を床からラゞアンに倉換するこずを忘れないでください。

おそらく、Fabricが存圚する理由はおわかりでしょう。

別の䟋を芋おみたしょう-キャンバスの状態を保存したす。

ある時点で、この赀い長方圢を別の堎所に移動する必芁があるず想像しおください。 オブゞェクトを管理できずにこれを行う方法は fillRect再床呌び出したすか

そうでもない。 別のfillRectコマンドfillRectず、ビットマップ党䜓の䞊に四角圢が描画されたす。 だから私は絵の具でブラシのアナログを持ち蟌んだ。 図を移動するには、たず前の結果を消去しおから、新しい堎所に描画する必芁がありたす。

 var canvasEl = document.getElementById('c'); ... ctx.strokRect(100, 100, 20, 20); ... //   canvas <b>ctx.clearRect(0, 0, canvasEl.width, canvasEl.height); ctx.fillRect(20, 50, 20, 20);</b> 

そしお今、ファブリックで

 var canvas = new fabric.Canvas('c'); ... canvas.add(rect); ... <b>rect.set({ left: 20, top: 50 }); canvas.renderAll();</b> 



非垞に重芁な違いに泚意しおください。 塗装する前に䜕も掗う必芁はありたせんでした。 オブゞェクトの操䜜を続けお属性を倉曎し、キャンバスを再描画しお倉曎を確認したす。 したがっお、倚数のオブゞェクトを倉曎し、最埌に1぀のコマンドで画面を曎新できたす。

オブゞェクト

fabric.Rectコンストラクタヌを䜿甚しお長方圢を操䜜する方法はすでに芋おfabric.Rectたした。 しかし、もちろん、Fabricは、円、䞉角圢、楕円など、他の倚くの単玔な圢状を提䟛したす。 それらはすべお、それぞれfabric.Circle 、 fabric.Triangle 、 fabric.Ellipseなどのfabricオブゞェクトからアクセスできたす。

Fabricで利甚できる7぀の基本圢状


円を描く必芁がありたすか 察応するオブゞェクトを䜜成しお、キャンバスに远加するだけです。 他の圢匏でも同じです

 var circle = new fabric.Circle({ radius: 20, fill: 'green', left: 100, top: 100 }); var triangle = new fabric.Triangle({ width: 20, height: 30, fill: 'blue', left: 50, top: 50 }); canvas.add(circle, triangle); 



...そしお今、キャンバス䞊で、ポむント100、100に緑の円を、ポむント50、50に青の䞉角圢を誇瀺したす。

オブゞェクトを管理したす


芖芚的な圢状の䜜成は、単なる花です。 ある時点で、おそらくそれらを倉曎する必芁がありたす。 おそらく、いく぀かのナヌザヌアクションが画像の状態キャンバスに圱響するか、アニメヌションを開始する必芁がありたす。 たたは、マりスの動きに応じおオブゞェクトの属性色、透明床、サむズ、䜍眮を倉曎する必芁がありたす。

ファブリックは、キャンバスの状態ず再描画を凊理したす。 私たちに必芁なのは、オブゞェクト自䜓を倉曎するこずだけです。

前の䟋では、 setメ゜ッドがオブゞェクトを新しいset({ left: 20, top: 50 })䜍眮set({ left: 20, top: 50 })移動する方法を芋たした。 同様に、他の属性も倉曎できたすが、そのうちのいく぀かは利甚可胜です。

たず、䜍眮を倉曎する属性がありたす-left、 top ; サむズ- 幅 、 高さ ; レンダリング自䜓オブゞェクトの衚瀺 -fill 、 opacity 、 stroke 、 strokeWidth 。 スケヌルず回転-scaleX 、 scaleY 、 角床 。 さらにクヌデタヌ180床 -flipX 、 flipY 。

はい、Fabricで反転画像を衚瀺するのは驚くほど簡単です-flip *属性にtrueを割り圓おるだけです。

属性はgetメ゜ッドを䜿甚しお読み取られ、割り圓おはsetを䜿甚しお読み取らsetたす。 長方圢をどうにかしおみたしょう。

 var canvas = new fabric.Canvas('c'); ... canvas.add(rect); rect.set('fill', 'red'); rect.set({ strokeWidth: 5, stroke: 'rgba(100,200,200,0.5)' }); rect.set('angle', 15).set('flipY', true); 



「塗り」を「赀」に蚭定し、オブゞェクトの色を赀に倉曎したす。 次に、「strokeWidth」ず「stroke」を倉曎し、明るい緑色の四角圢に5ピクセルの境界線を远加したした。 最埌に、属性「angle」および「flipY」を倉曎したす。 3぀の匏の構文がわずかに異なるこずに泚意しおください。

これは、 set()がかなり普遍的な方法であるこずを瀺しおいたす。 頻繁に䜿甚するこずを目的ずしおいるため、利䟿性のためにシャヌプ化されおいたす。

さお、読曞はどうですか 共通のget()ず特定のget*()メ゜ッドのセットがあるこずは既に述べたした。 たずえば、オブゞェクトの「幅」を取埗するには、 get('width')たたはgetWidth()䜿甚できたす。 「scaleX」の堎合、 get('scaleX')たたはgetScaleX()など。 オブゞェクトのすべおの「パブリック」属性「ストロヌク」、「ストロヌク幅」、「角床」などに察しおgetWidth()やgetScaleX()などの特別なメ゜ッドが存圚したす。

前の䟋では、 setメ゜ッドで䜿甚したものずたったく同じように芋える構成ハッシュが䜿甚されおいるこずに気づいたでしょう。 これは、それらが本圓に同じだからです。 オブゞェクトは、䜜成時に、たたは埌でsetメ゜ッドを䜿甚しお「構成」できたす。 ただし、構文はたったく同じです。

 var rect = new fabric.Rect({ width: 10, height: 20, fill: '#f55', opacity: 0.7 }); //   var rect = new fabric.Rect(); rect.set({ width: 10, height: 20, fill: '#f55', opacity: 0.7 }); 

デフォルトの属性


Fabricのすべおのオブゞェクトには、デフォルト倀のセットがありたす。 これらは、䜜成䞭に他の倀を蚭定しないずきに䜿甚されたす。 䟋を挙げたす。

 var rect = new fabric.Rect(); //     rect.getWidth(); // 0 rect.getHeight(); // 0 rect.getLeft(); // 0 rect.getTop(); // 0 rect.getFill(); // rgb(0,0,0) rect.getStroke(); // null rect.getOpacity(); // 1 

長方圢はデフォルト倀を取埗したした。 䜍眮0,0、黒、䞍透明、フレヌムなし、寞法なし幅ず高さはれロ。 このため、圌には䌚えたせん。 正の幅/高さを蚭定するずすぐに、巊䞊隅に黒い長方圢が衚瀺されたす。



階局ず継承


ファブリックオブゞェクトは、単独では存圚したせん。 それらは明確な階局を圢成したす。

ほずんどのオブゞェクトはfabric.Objectから継承しfabric.Object 。 fabric.Objectは、平面䞊の抜象的な2次元図です。 left / topおよびwidth / height属性、およびその他の芖芚的パラメヌタヌのセットがありたす。 前に芋た属性塗り぀ぶし、ストロヌク、角床、䞍透明床、フリップ*などは、 fabric.Objectを継承するすべおのFabricオブゞェクトに属したす。

このような継承は非垞に䟿利です。 fabric.Objectでメ゜ッドを定矩できるため、スレッドのすべおの「クラス」で䜿甚できるようになりたす。 たずえば、すべおのオブゞェクトでgetAngleInRadiansメ゜ッドが必芁な堎合は、 getAngleInRadians䜜成しfabric.Object.prototype 。

 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 

ご芧のずおり、メ゜ッドはすべおのオブゞェクトで利甚可胜になりたした。

もちろん、子孫クラスはfabric.Objectから継承できるだけでなく、独自のメ゜ッドずパラメヌタヌも定矩できたす。 たずえば、 fabric.Circleには、远加の属性「半埄」がありたす。 たたは、たずえばfabric.Imageを䜿甚したす。これに぀いおは埌で詳しく説明したす。 タむプfabric.Imageオブゞェクトfabric.Image <img>芁玠のHTMLを読み曞きするためのgetElement / setElementメ゜ッドがありたす。

キャンバスキャンバス


オブゞェクトを詳现に調べたした。 もう䞀床キャンバスに戻りたしょう。

䟋からわかるように、最初は、それ自䜓を描画するための「キャンバス」の䜜成です。 new fabric.Canvas('...')です。 fabric.Canvasは、基本的に<canvas>芁玠のラッパヌであり、含たれるすべおのオブゞェクトを管理したす。 コンストラクタヌは芁玠のIDをfabric.Canvas 、タむプfabric.Canvasオブゞェクトを返したす。

これで、オブゞェクトを远加 add() したり、それらを読み取ったり item() 、 getObjects() 、たたは削陀 remove() できたす

 var canvas = new fabric.Canvas('c'); var rect = new fabric.Rect(); canvas.add(rect); //  canvas.item(0); //  fabric.Rect,   ( ) canvas.getObjects(); //    (    ) canvas.remove(rect); //   

すでにわかったように、 fabric.Canvasの䞻なタスクは、その䞊にあるオブゞェクトを管理するこずです。 たた、䞀連のパラメヌタヌを䜿甚しお構成するこずもできたす。 キャンバスの背景の倉曎、マスクによるオブゞェクトの非衚瀺、党䜓の長さ/幅の倉曎、むンタラクティブ機胜のオン/オフのfabric.Canvas蚭定、およびその他のオプションは、䜜成䞭ず埌での䞡方でfabric.Canvas盎接蚭定できたす

 var canvas = new fabric.Canvas('c', { backgroundColor: 'rgb(100,100,200)', selectionColor: 'blue', selectionLineWidth: 2 // ... }); //  var canvas = new fabric.Canvas('c'); canvas.backgroundImage = 'http://...'; canvas.onFpsUpdate = function(){ /* ... */ }; // ... 

双方向性


カヌネルに盎接組み蟌たれおいるFabricの最もナニヌクな機胜の1぀は、むンタラクティブレむダヌです。 これにより、ナヌザヌは、慣れ芪しんだオブゞェクトモデルを操䜜できたす。

プログラムによるアクセス甚のオブゞェクトモデルが存圚したす。 そしお、マりスたたはモバむルデバむスではタッチパッドでオブゞェクトを制埡するには䜕が必芁ですか これを行うために、Fabricにはナヌザヌアクセス機胜がありたす。 new fabric.Canvas('...')を介しおキャンバスを䜜成するずすぐに、その䞊にあるオブゞェクトをすぐに遞択、移動、スケヌリング、回転、さらにはグルヌプ化しお 、1぀のものずしお管理できたす





ナヌザヌがキャンバス䞊のオブゞェクト写真などを管理できるようにするには、キャンバスを䜜成しおオブゞェクトを远加するだけです。 これ以䞊の远加蚭定は必芁ありたせん。

この察話性の管理は簡単です。 これを行うために、キャンバスには「遞択」フラグがあり、個々のオブゞェクトには「遞択可胜」フラグがありたす。

 var canvas = new fabric.Canvas('c'); ... canvas.selection = false; //   rect.set('selectable', false); //    

しかし、むンタラクティブ機胜がたったく必芁ない堎合はどうでしょうか 次に、 fabric.Canvasをfabric.StaticCanvas倉曎しfabric.StaticCanvas 。 構文蚭定、メ゜ッドはたったく同じですStaticCanvas代わりにStaticCanvas䜿甚しおStaticCanvas 。

 var staticCanvas = new fabric.StaticCanvas('c'); staticCanvas.add( new fabric.Rect({ width: 10, height: 20, left: 100, top: 100, fill: 'yellow', angle: 30 })); 

これにより、察話性ずむベント管理のためのロゞックが倚すぎるこずなく、キャンバスの軜量バヌゞョンが䜜成されたす。 他のすべおは同じたたです。 完党なオブゞェクトモデルを取埗し、オブゞェクトを削陀および倉曎し、もちろんキャンバス自䜓のオプションを倉曎できたす。 倖郚むベントの管理のみが消えたす。

将来、Fabricのカスタムアセンブリカスタムビルドの可胜性に慣れるず、ニヌズに合わせおラむブラリの軜量バヌゞョンを䜜成できるこずがわかりたす。 これは、たずえば、静的グラフ、SVGフィギュア、たたはフィルタヌ付きの画像を衚瀺するだけの堎合に䟿利です。

写真


ずころで、写真に぀いおは......

それでも、単玔な圢状での䜜業は、グラフィックが豊富な画像ほど興味深いものではありたせん。 おそらく既にご想像のずおり、Fabricでは非垞に簡単です。 fabric.Imageオブゞェクトを䜜成し、キャンバスに远加したす。

html
 <canvas id="c"></canvas> <img src="my_image.png" id="my-image"> 

js
 var canvas = new fabric.Canvas('c'); var imgElement = document.getElementById('my-img'); var imgInstance = new fabric.Image(imgElement, { left: 100, top: 100, angle: 30, opacity: 0.85 }); canvas.add(imgInstance); 

<image>芁玠をfabric.Imageコンストラクタヌに枡す方法に泚目しおfabric.Image 。 したがっお、この芁玠の画像であるタむプfabric.Imageオブゞェクトを䜜成したす。 たた、left / topの倀を100/100、角床を30、透明床を0.85に蚭定したす。 キャンバスに远加するず、画像は100,100でレンダリングされ、30床回転し、わずかに透明になりたす 悪くない...



しかし、ドキュメント内の画像芁玠が存圚しない堎合、そのアドレスのみがある堎合はどうなりたすか これは怖くない。 この堎合、 fabric.Image.fromURLを䜿甚できたす

 fabric.Image.fromURL('my_image.png', function(oImg) { canvas.add(oImg); }); 

ここで驚きはありたせん。 fabric.Image.fromURLをfabric.Image.fromURL 、ピクチャのアドレスず、ピクチャがロヌドされたずきに呌び出す必芁のある関数コヌルバックを枡したす。 コヌルバックは、最初の匕数ずしおfabric.Imageオブゞェクトを受け取りたす。 呌び出し時に、それを䜿っお䜕でもできたす-倉曎するか、すぐにキャンバスに远加しお衚瀺したす。

 fabric.Image.fromURL('my_image.png', function(oImg) { //       oImg.scale(0.5).setFlipX(true); canvas.add(oImg); }); 

パスずパスグルヌプ


単玔な圢ず写真を芋たした。 次に、より耇雑なコンテンツに移りたしょう。

パワフルでかけがえのないカップルに出䌚うPathずPathGroup。

Fabricのパス文字通り翻蚳された「パス」は、色で塗り぀ぶしたり、パスを䜜成したり、任意の方法で倉曎したりできる曲線図です。 これは、あるポむントから別のポむントぞのペンによる描画ず比范できる䞀連のコマンドで衚されたす。 「移動」、「線」、「曲線」、「円匧」などのコマンドを䜿甚するず、パスは驚くほど耇雑な圢状を再珟できたす。 そしお、パスグルヌプPathGroupの助けを借りお、すべおが可胜になりたす。

FabricのパスはSVG <path>芁玠に䌌おいたす 。 それらは同じコマンドセットを䜿甚し、<path>芁玠から䜜成しおそれらにシリアル化できたす。 シリアル化ずSVG解析に぀いおは埌で説明したす。 ここで、Pathオブゞェクトを手動で操䜜する可胜性は䜎いず蚀っおおく䟡倀がありたす。 代わりに、Fabricに組み蟌たれたSVGパヌサヌを䜿甚するこずは理にかなっおいたす。 これらのPathオブゞェクトが䜕であるかを理解するために、それらの1぀を䜜成したしょう。

 var canvas = new fabric.Canvas('c'); var path = new fabric.Path('M 0 0 L 200 100 L 170 200 z'); path.set({ left: 120, top: 120 }); canvas.add(path); 



fabric.Pathオブゞェクトを䜜成するずき、曲線を「プロット」するための指瀺を含む行を枡したす。 もちろん、この指瀺は非垞に神秘的に芋えたすが、実際には非垞に理解しやすいです。 「M」は「移動」を意味し、目に芋えないペンにポむント0、0に移動するように指瀺したす。「L」は「ラむン」を意味し、ポむント200、100にラむンを描画したす。 、200。最埌に、「z」は非衚瀺ハンドルを匷制的に珟圚のパスを閉じ、圢状を完成させたす。 その結果、このような䞉角圢の圢状が埗られたす。

fabric.PathオブゞェクトはFabricの残りのオブゞェクトず同じであるため、パラメヌタヌを簡単に倉曎したした巊、䞊。 ただし、さらに倉曎できたす。

 ... var path = new fabric.Path('M 0 0 L 300 100 L 200 300 z'); ... path.set({ fill: 'red', stroke: 'green', opacity: 0.5 }); canvas.add(path); 



楜しみのために、今床はより耇雑な別の回路を芋おみたしょう。 茪郭を手動で䜜成するこずが最も楜しいアクティビティではない理由を理解できたす。

 ... var path = new fabric.Path('M121.32,0L44.58,0C36.67,0,29.5,3.22,24.31,8.41\ c-5.19,5.19-8.41,12.37-8.41,20.28c0,15.82,12.87,28.69,28.69,28.69c0,0,4.4,\ 0,7.48,0C36.66,72.78,8.4,101.04,8.4,101.04C2.98,106.45,0,113.66,0,121.32\ c0,7.66,2.98,14.87,8.4,20.29l0,0c5.42,5.42,12.62,8.4,20.28,8.4c7.66,0,14.87\ -2.98,20.29-8.4c0,0,28.26-28.25,43.66-43.66c0,3.08,0,7.48,0,7.48c0,15.82,\ 12.87,28.69,28.69,28.69c7.66,0,14.87-2.99,20.29-8.4c5.42-5.42,8.4-12.62,8.4\ -20.28l0-76.74c0-7.66-2.98-14.87-8.4-20.29C136.19,2.98,128.98,0,121.32,0z'); canvas.add(path.set({ left: 100, top: 200 })); 

うわヌ、ここで䜕が起こっおいるの 正しくしたしょう。

「M」は䟝然ずしおコマンドを「移動」するこずを意味し、ここでは芋えないハンドルが「121.32、0」ポむントから移動を開始したす。 次に、「L」コマンドが出され、ポむント「44.58、0」に到達したす。 これたでのずころ、すべおがシンプルです。 次はどうですか 「C」コマンドは「立方ベゞェ」ベゞェ曲線 を意味したす。 圌女は、ペンに「36.67、0」の点で曲線を描くように匷制したす。 曲線は、行の先頭のコントロヌルポむントずしお「29.5、3.22」を䜿甚し、行の終わりのコントロヌルポむントずしお「24.31、8.41」を䜿甚したす。 これに続いお、無数の他のベゞェ曲線が続き、最終的に最終的な圢状を䜜成したす。



このような「モンスタヌ」を手動で操䜜するこずはおそらくないでしょう。 代わりに、非垞に䟿利なfabric.loadSVGFromStringたたはfabric.loadSVGFromURL䜿甚しお、SVGファむル党䜓をロヌドできたす。 Fabricパヌサヌは、すべおのSVG芁玠を調べお、察応するPathオブゞェクトを䜜成するこずで残りを実行したす。

ちなみに、SVGドキュメントに関しおは、FabricのPathは通垞SVG <path>芁玠を衚したすが、SVGドキュメントでよく芋られるこのような芁玠のセットは、通垞PathGroup fabric.PathGroupオブゞェクトでfabric.PathGroupたす。 PathGroupは、Pathオブゞェクトの単なるグルヌプです。 fabric.PathGroup継承するfabric.Object 、このようなオブゞェクトは他のFabricオブゞェクトず同様にキャンバスに远加できたす。 もちろん、他のすべおの人ず同様に制埡できたす。

ほずんどの堎合、盎接䜜業する必芁はありたせん。 Fabricで䜜業しおいるずきにそれらに出くわした堎合は、䜕を扱っおいるのか、なぜ必芁なのかを念頭に眮いおください。

あずがき


Fabricの最も基本的な偎面のみを取り䞊げたした。 それらを凊理したら、単玔な圢状ず耇雑な圢状、たたは画像の䞡方を簡単に䜜成できたす。 それらをキャンバスに衚瀺し、䜍眮、スケヌル、角床、色、茪郭、透明床の属性を介しおそれらを倉曎し、あなたの心が望むものを䜕でもするこずができたす。

次の郚分では、グルヌプ、アニメヌション、テキスト、SVG解析、レンダリングずシリアル化、むベント管理、画像フィルタヌ、その他の興味深いものの操䜜に぀いお説明したす。

, google group Stackoverflow , , wiki , .

Fabric!

.

Source: https://habr.com/ru/post/J162367/


All Articles