
仿¥ã¯ã
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ã䜿çšããŠãããã¯æ¬¡ã®ããã«è¡ãããŸãã
ãããŠãããã¯Fabricã§ãåãã§ãïŒ

ã³ãŒããµã€ãºã®éãã¯ãŸã ããããŸããã ãã ãããã£ã³ãã¹ã®æäœæ¹æ³ãæ ¹æ¬çã«ç°ãªãããšã¯æããã§ãã éåžžã®ãã£ã³ãã¹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');

ããã§äœãèµ·ãã£ãŠããŸããïŒ
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); ...
ãããŠä»ããã¡ããªãã¯ã§
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 });
ããã©ã«ãã®å±æ§
Fabricã®ãã¹ãŠã®ãªããžã§ã¯ãã«ã¯ãããã©ã«ãå€ã®ã»ããããããŸãã ãããã¯ãäœæäžã«ä»ã®å€ãèšå®ããªããšãã«äœ¿çšãããŸãã äŸãæããŸãã
var rect = new fabric.Rect();
é·æ¹åœ¢ã¯ããã©ã«ãå€ãååŸããŸããã äœçœ®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();
ã芧ã®ãšãããã¡ãœããã¯ãã¹ãŠã®ãªããžã§ã¯ãã§å©çšå¯èœã«ãªããŸããã
ãã¡ãããåå«ã¯ã©ã¹ã¯
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);
ãã§ã«ããã£ãããã«ã
fabric.Canvas
ã®äž»ãªã¿ã¹ã¯ã¯ããã®äžã«ãããªããžã§ã¯ãã管çããããšã§ãã ãŸããäžé£ã®ãã©ã¡ãŒã¿ãŒã
䜿çšããŠ
æ§æããããšã
ã§ããŸãã ãã£ã³ãã¹ã®èæ¯ã®å€æŽããã¹ã¯ã«ãããªããžã§ã¯ãã®é衚瀺ãå
šäœã®é·ã/å¹
ã®å€æŽãã€ã³ã¿ã©ã¯ãã£ãæ©èœã®ãªã³/ãªãã®
fabric.Canvas
èšå®ãããã³ãã®ä»ã®ãªãã·ã§ã³ã¯ãäœæäžãšåŸã§ã®äž¡æ¹ã§
fabric.Canvas
çŽæ¥èšå®ã§ããŸãïŒ
var canvas = new fabric.Canvas('c', { backgroundColor: 'rgb(100,100,200)', selectionColor: 'blue', selectionLineWidth: 2
忹忧
ã«ãŒãã«ã«çŽæ¥çµã¿èŸŒãŸããŠããFabricã®æããŠããŒã¯ãªæ©èœã®1ã€ã¯ãã€ã³ã¿ã©ã¯ãã£ãã¬ã€ã€ãŒã§ãã ããã«ããããŠãŒã¶ãŒã¯ãæ
£ã芪ããã ãªããžã§ã¯ãã¢ãã«ãæäœã§ããŸãã
ããã°ã©ã ã«ããã¢ã¯ã»ã¹çšã®ãªããžã§ã¯ãã¢ãã«ãååšããŸãã ãããŠãããŠã¹ïŒãŸãã¯ã¢ãã€ã«ããã€ã¹ã§ã¯ã¿ãããããïŒã§ãªããžã§ã¯ããå¶åŸ¡ããã«ã¯äœãå¿
èŠã§ããïŒ ãããè¡ãããã«ãFabricã«ã¯ãŠãŒã¶ãŒã¢ã¯ã»ã¹æ©èœããããŸãã
new fabric.Canvas('...')
ãä»ããŠãã£ã³ãã¹ãäœæãããšããã«ããã®äžã«ãããªããžã§ã¯ããããã«éžæãç§»åãã¹ã±ãŒãªã³ã°ãå転ãããã«ã¯
ã°ã«ãŒãåã㊠ã1ã€ã®ãã®ãšããŠç®¡çã§ããŸãïŒ


ãŠãŒã¶ãŒããã£ã³ãã¹äžã®ãªããžã§ã¯ãïŒåçãªã©ïŒã管çã§ããããã«ããã«ã¯ããã£ã³ãã¹ãäœæããŠãªããžã§ã¯ãã远å ããã ãã§ãã ãã以äžã®è¿œå èšå®ã¯å¿
èŠãããŸããã
ãã®å¯Ÿè©±æ§ã®ç®¡çã¯ç°¡åã§ãã ãããè¡ãããã«ããã£ã³ãã¹ã«ã¯ãéžæããã©ã°ããããåã
ã®ãªããžã§ã¯ãã«ã¯ãéžæå¯èœããã©ã°ããããŸãã
var canvas = new fabric.Canvas('c'); ... canvas.selection = 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) {
ãã¹ãšãã¹ã°ã«ãŒã
åçŽãªåœ¢ãšåçãèŠãŸããã æ¬¡ã«ãããè€éãªã³ã³ãã³ãã«ç§»ããŸãããã
ãã¯ãã«ã§ããããã®ãªãã«ããã«ã«åºäŒãïŒ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!
.