javascript - Fabricjs:用图像图案填充 svg

标签 javascript jquery svg coffeescript fabricjs

我想加载我的 SVG 文件,并用从我的图像文件创建的图案填充它。

这是我当前的方法:

canvas = new fabric.Canvas('mainCanvas')
# image = new fabric.Image(img[0])
# console.log image
fabric.loadSVGFromURL '/assets/my.svg',
  (objects) ->
    fabric.util.loadImage "url/to/my/image", (image) ->
      console.log image
      svg = fabric.util.groupSVGElements(objects)
      svg = svg.scale(0.04).set(fill: "black", opacity: 0.5 )
      svg.fill = new fabric.Pattern
        source: image
        repeat: "no-repeat"
      canvas.add(svg)
      canvas.renderAll()

最初,我尝试使用fabric.Image实例(img是jQuery图像元素,所以我将原始html元素传递给构造函数),但只是为了确定并使用更类似于pattern tutorial的代码我正在使用 loadImage 方法。

不幸的是,这段代码似乎不起作用(svg 已加载,但上面没有模式)。是否可以用图案填充 svg?如果可以,我该如何实现?

最佳答案

问题可能是您的 SVG 形状被解析为 fabric.PathGroup 而不是 fabric.Path。由于 fabric.PathGroup 由多个 fabric.Path 对象组成,因此您需要设置它们的填充值,而不是 PathGroup 实例本身的填充值。

if (obj instanceof fabric.PathGroup) {
  obj.getObjects().forEach(function(o) { o.fill = pattern; });
}
else {
  obj.fill = pattern;
}

如果您转到kitchensink并使用“Patternify”按钮,您可以看到它适用于更复杂的形状(这正是我们在那里使用的代码):

enter image description here

关于javascript - Fabricjs:用图像图案填充 svg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18588036/

相关文章:

javascript - 使用 JQuery $.getJSON 解析外部 JSON?

css - 在纯 CSS、CSS/SVG 或 CSS/HTML5 中构建动态和可重用图形元素的最跨浏览器安全方式

php - javascript、php 和 html 上的 slider 动态

javascript - 如何让 YouTube API 在 Internet Explorer 11 和 Safari 中静音

javascript - 使用相同 JavaScript 的多个控件

javascript - 如何将三元 if 语句转回标准 javascript?

javascript - 动态创建的元素上的事件绑定(bind)?

html - 将鼠标悬停在 SVG 多边形上时不显示工具提示

javascript - 如何在 fabric.js 中导出具有自定义属性的 SVG?

javascript - 如何使用 javascript 或 jquery 获取新表单输入的更新 json 文件?