fabricjs 相关问题

Fabric.js是一个HTML5画布库,为画布提供了一个对象模型,一个SVG到画布的渲染器和一个画布到SVG的解析器。

Fabricjs 文本框使文本缩小以适合

我会定义一个文本框(单行) 默认情况下,字符大小为16(举例) 当文本变得比文本框大时,我不希望它换行或文本框变得更大,我...

回答 3 投票 0

限制 IText 或 Textbox 上的文本输入

我正在尝试使用 IText 或 Textbox 对象在织物画布顶部创建文本输入。这似乎在使用 Fabric 的 http://impretty.me 上完成得很好,但我不能......

回答 4 投票 0

如何调整画笔宽度? - Fabric.js

我可以在fabric.js中调整画笔大小,但是再次更改画笔大小后,绘制的轮廓在绘制后立即向左移动一点,向上移动一点! 我的代码在

回答 1 投票 0

在 Fabric.js 画布中保存具有许多元素的对象

我正在开发一个在 Fabric.js 画布上进行图像处理的 Rails 应用程序,我想实现一个语音气泡,就像这篇文章中的那样:Speech bubbles in Canvas/FabricJS?。其中一个答案给出了

回答 1 投票 0

FabricJs - 缩放画布以适合对象

我正在尝试将缩放设置为画布,以便适应高于原始画布高度的对象。这是一把小提琴。如果您注意到,如果您取消注释这些行,我希望画布按原样缩放: //

回答 2 投票 0

FabricJS:垂直对齐文本中心

我使用的是fabricjs 1.5,我一直坚持将文本垂直对齐行中间。 我正在使用此代码来设置行高 text.setProperty('lineHeight', $scope.lineHeight.current...

回答 3 投票 0

让用户删除选定的 Fabric js 对象

我有一个简单的基于fabric js的应用程序,我将让用户添加形状连接它们并为它们设置动画。 以下是我的JS var 画布; window.newAnimation = 函数(){ 画布 = 新工厂...

回答 8 投票 0

如何在FabricJS文本中实现波浪效果

我想在织物文本对象上实现类似的波浪效果。我不知道如何才能实现它。 <p>我想在织物文本对象上实现类似的波浪效果。我不知道如何实现它。</p> <p></p><div data-babel="false" data-lang="js" data-hide="false" data-console="true"> <div> <pre><code>&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.3.0/fabric.min.js&#34;&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;canvas id=&#34;canvas&#34;&gt;&lt;/canvas&gt; &lt;script&gt; var canvas = new fabric.Canvas(&#34;canvas&#34;); canvas.setWidth(900); canvas.setHeight(500); canvas.set({ backgroundColor: &#34;#FFC0CC&#34; }); var text = new fabric.Textbox(&#34;Hello, Fabric.js!&#34;, { left: 50, top: 50, fontSize: 30, fill: &#34;black&#34;, }); canvas.add(text); canvas.renderAll(); &lt;/script&gt; &lt;/body&gt; &lt;/html&gt;</code></pre> </div> </div> <p></p> <p><a href="https://i.stack.imgur.com/cr8HH.gif" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL2NyOEhILmdpZg==" alt=""/></a></p> </question> <answer tick="false" vote="0"> <p>为了实现这一点,您需要单独为消息的字符设置动画。我快速浏览了 Fabric 的 <a href="http://fabricjs.com/docs/" rel="nofollow noreferrer">API 文档</a> 和 <a href="http://fabricjs.com/fabric-intro-part-2" rel="nofollow noreferrer"> 动画教程内容</a>,下面的内容将满足您的需求。</p> <p>“Hello, Fabric.js!”中的每个角色被赋予自己的 Text 对象,该对象按其在字符串中的索引进行偏移;抱歉,这里没有字距调整。然后在开始制作动画之前,给它一个初始等待时间,也乘以它的索引。这样就实现了波纹度。</p> <p>最后,织物动画提供了动画完成时的事件。 <pre><code>animateA</code></pre> 和 <pre><code>animateB</code></pre> 只是在该事件上相互调用的上下位移。</p> <p>角色最终会失去同步,尤其是不在活动选项卡中时。像 tween.js 这样具有更强动画效果的东西将为您提供可重复的路径和计时组,尽管它“最好”是通过一点 Math.sin 和裸画布 API 完成的。<em> </em><code>&lt;!doctype html&gt; &lt;html&gt; &lt;head&gt; &lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.3.0/fabric.min.js&#34;&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;canvas id=&#34;canvas&#34;&gt;&lt;/canvas&gt; &lt;script&gt; var canvas = new fabric.Canvas(&#34;canvas&#34;) canvas.setWidth(900) canvas.setHeight(500) canvas.set({ backgroundColor: &#34;#FFC0CC&#34; }) var text = &#34;Hello, Fabric.js!&#34; for (var i = 0; i &lt; text.length; ++i) { var letter = new fabric.Text(text[i], { left: 50 + i * 20, top: 50, fontSize: 30, fill: &#34;black&#34; }) setTimeout(animateA, 1e2 * i, letter) canvas.add(letter) } function animateA(target) { target.animate(&#34;top&#34;, &#34;+=20&#34;, { duration: 2e3, easing: fabric.util.ease.easeInOutQuad, onChange: canvas.renderAll.bind(canvas), onComplete: function() { animateB(target) } }) } function animateB(target) { target.animate(&#34;top&#34;, &#34;-=20&#34;, { duration: 2e3, easing: fabric.util.ease.easeInOutQuad, onChange: canvas.renderAll.bind(canvas), onComplete: function() { animateA(target) } }) } canvas.renderAll() &lt;/script&gt; &lt;/body&gt; &lt;/html&gt; </code></p> <pre> </pre></answer>

回答 0 投票 0

无论如何,可以尝试从Fabricjs中的Url捕获图像、svg加载

我想从 url 添加 svg 图像,当我尝试将其添加到画布时,它给了我一个错误。我想捕获错误以通知用户该错误。然而,fabricjs 抛出这个错误 未捕获

回答 1 投票 0

如何移动nextjs useState中创建的fabricjs对象?

当我在 useEffect() 中创建织物画布时,它不允许我移动添加的图像,但如果我在其他地方创建它(受 useState 异步问题的影响),它确实允许我正常移动。 ...

回答 1 投票 0

Fabric.js 使用控制处理程序进行图像操作,当图像被裁剪和缩放时,下一个裁剪操作不会应用于之前的状态

在给定的fabricjs代码中,我正在使用图像控制处理程序开发裁剪和缩放功能。当图像第一次缩放然后裁剪时,在这种情况下它工作正常。然后

回答 1 投票 0

Fabric.js 绘图时图像/文本消失

我已经使用fabric npm 包在我的react 应用程序中设置了Fabric.js。我正在尝试构建一个艺术板,您可以在其中绘图、添加文本和添加图像。由于某种原因添加元素(图像/文本)...

回答 1 投票 0

为什么当我通过自定义控件更改圆的位置和大小时,Fabric 没有重新渲染圆?

我阅读了Fabric官方文档和演示,然后定制了两个控件来扩展Cicle。 Circle 容器的大小和控件的位置会改变,但我发现 Fabric 没有重新渲染

回答 1 投票 0

如何在标准化坐标中存储fabricjs对象

我使用fabricjs toJSON 将对象坐标存储到.json 文件中。 然后,我使用 loadFromJSON 从 .json 文件重新加载对象。 可以在更大的画布上创建对象然后恢复

回答 1 投票 0

摆脱 Fabric.js 中的旋转控制

在此 jsfiddle 中,我有一个使用 lockRotation: true 创建的 Fabric.js 文本,以避免旋转。这条线消失了,但是旋转框仍然存在,如何去掉它? 超文本标记语言 在此 jsfiddle 中,我使用 lockRotation: true 创建了 Fabric.js 文本以避免旋转。线条消失了,但是旋转的框控件还在,怎么去掉呢? HTML <canvas id="c" width="300" height="300"></canvas> Javascript var canvas = new fabric.Canvas('c'); var text = new fabric.IText('This is the text',{ left: 50, top: 50, fontFamily: 'Arial', fontWeight: 'normal', fontSize: 18, lockRotation: true, stroke: 'black', fill: 'black' }); 接受的答案对于 Fabricjs 4.0 版本不再有效(请参阅changelog)。 hasRotatingPoint 已被删除,以支持更全面的控件 API,尽管它的 文档 仍然非常薄弱。 要对特定对象隐藏某个控件,您必须重新定义其 controls 属性。以下是隐藏 mtr 控件(旋转)的方法: text.controls = { ...fabric.Text.prototype.controls, mtr: new fabric.Control({ visible: false }) } var canvas = new fabric.Canvas('c'); var text = new fabric.IText('This is the text',{ left: 50, top: 50, fontFamily: 'Arial', fontWeight: 'normal', fontSize: 18, stroke: 'black', fill: 'black' }); text.controls = { ...fabric.Text.prototype.controls, mtr: new fabric.Control({ visible: false }) } canvas.add(text); <script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script> <canvas id="c" width="300" height="300"></canvas> 在这里,我们使用文本的默认控件创建一个新的控件对象,但重新定义 mtr 集。 使用 object.hasRotatingPoint = false;隐藏旋转点。 var canvas = new fabric.Canvas('c'); var text = new fabric.IText('This is the text',{ left: 50, top: 50, fontFamily: 'Arial', fontWeight: 'normal', fontSize: 18, hasRotatingPoint: false, stroke: 'black', fill: 'black' }); canvas.add(text); <script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script> <canvas id="c" width="300" height="300"></canvas> 使用setControlsVisibility,它适用于fabricjs的所有对象类型 fabric.Image.fromURL(src, (img) => { var oImg = img.set({ left: 0, top: 0, }) oImg.setControlsVisibility({ mtr: false }) canvas.add(oImg) canvas.setActiveObject(oImg) canvas.renderAll() } let newtext = new fabric.Textbox(text, { left: 0, top: 0, originX: 'center', originY: 'center', fontFamily: 'Inter', fill: '#fff', textAlign: 'center',} ) newtext.setControlsVisibility({ mtr: false }) canvas.add(newtext) canvas.setActiveObject(newtext) canvas.renderAll() 有时禁用对象旋转还不够。人们仍然可以选择多个对象,并且旋转控制点会再次显示。您可能还想禁用组轮换 fabric.Group.prototype._controlsVisibility = { tl: true, tr: true, br: true, bl: true, ml: false, mt: false, mr: false, mb: false, mtr: false };

回答 4 投票 0

fabricjs 在模拟移动触摸设备时无法正确渲染

我使用 Threejs 来管理画布(canvas0)(例如,放大/缩小和平移)并使用 Fabricjs 进行注释(canvas1)。 当使用鼠标事件时,这在 Chrome 浏览器中工作得很好,但是......

回答 1 投票 0

如何使用 Threejs 和 Fabricjs 管理画布

我的应用程序使用 Threejs 来管理画布。例如,放大/缩小和平移。 我还添加了fabricjs进行注释。 该应用程序的工作方式是它有一个“渲染器”元素......

回答 1 投票 0

在 Fabric JS 上用鼠标绘制虚线边框

当鼠标悬停在fabric js组件上时,我需要添加这种破折号边框。我想用鼠标移出事件清除它 我该如何处理?有什么建议吗? 我尝试过罢工,它有效,但是......

回答 1 投票 0

在Fabric.js中有没有办法让透明对象带有阴影?

我的最终目标是拥有一个模糊的多边形对象。由于没有针对对象的滤镜,只有图像,我想我可以使对象透明并使用模糊的阴影: const Poly = 新面料.Po...

回答 1 投票 0

Fabric JS 背景图片大小问题

因此,有多种方法可以加载画布背景图像,但在我的代码中,我像这样加载它: var canvas = new Fabric.Canvas('canvas', { backgroundImage: " 因此,有多种方法可以加载画布背景图像,但在我的代码中,我像这样加载它: var canvas = new fabric.Canvas('canvas', { backgroundImage: "<?php echo $image; } ?>", } 在我发现的教程中(https://www.tutorialspoint.com/how-to-create-a-canvas-with-background-image-using-fabricjs)它展示了如何设置画布高度和宽度,例如所以: canvas.setWidth(document.body.scrollWidth / 2.2); canvas.setHeight(650); 但是我需要调整背景图像本身而不是整个画布的大小,而且我在网上找不到任何描述如何执行此操作的地方。从逻辑上讲,当我最初设置画布背景图像时应该设置如下所示: var canvas = new fabric.Canvas('canvas', { backgroundImage: "<?php echo $image; } ?>", backgroundImageWidth: "50%", backgroundImageHeight: "100%",} 但这不起作用,我尝试了其他一些方法,例如 setBackgroundImageWidth: 或 backgroundSize: 等......只是在黑暗中拍摄。我找不到任何描述以这种方式设置背景图像大小的 stackoverflow 问题。有谁知道该怎么做吗? 无法在fabricJS 的构造函数中指定背景图像的尺寸。当您从 URL 加载图像时,您必须利用 Image 类的 fromURL() 方法来实例化 FabricJS Image,然后您可以将其与 backgroundImage 属性一起使用。 fromURL() 方法接受一个回调函数,该函数应该负责图像的实际大小调整。不幸的是,你不能简单地改变宽度和高度,因为 FabricJS 在内部锁定了宽高比。相反,您必须计算所需的宽度和高度作为比例,并使用图像的 .scaleX 和 .scaleY 属性。 这是一个例子: let canvas = document.createElement("canvas"); document.body.appendChild(canvas); let canv = new fabric.Canvas(canvas, { backgroundColor: 'rgba(230, 230, 230, 1)', backgroundImage: fabric.Image.fromURL("https://picsum.photos/id/237/400/300", (img) => { img.scaleX = canv.width * 0.5 / img.width; img.scaleY = canv.height * 0.5 / img.height; canv.backgroundImage = img; canv.renderAll(); }) }); <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.3.1/fabric.min.js"></script>

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.