В настоящее время я пытаюсь использовать библиотеку fabric.js для заполнения PNG или SVG шаблоном. Я попытался получить вдохновение оттуда, но не смог заставить его работать, как объясняется.
Вот мой пример:
Вот мой шаблон PNG (не могу загрузить SVG, но он здесь. И SVG белый):
// GET AND INIT CANVAS (400x400)
canvas = new fabric.Canvas('canvas');
// MY PATHS
let patternURL = "../images/background1.jpg";
let SVGURL = "../svg/test.svg";
// CREATE MY SVG ELEMENT
fabric.loadSVGFromURL(SVGURL, function(objects, options) {
// CREATE MY PATTERN IMAGE
fabric.Image.fromURL(patternURL, function(patternImage) {
svg = fabric.util.groupSVGElements(objects, options);
svg = svg.set({"opacity": 1});
svg.getObjects().forEach(function(e) {
// IF I DON'T USE THIS LINE, THE SVG REMAIN WHITE
e.fill = patternImage
});
canvas.add(svg);
});
});
Вот что я получил после выполнения моего кода:
NB: я могу перемещать PNG, и если я добавлю canvas.add(patternImage);
перед добавлением SVG, я получаю этот результат:
(поэтому шаблон загружается так, как он должен).
Я думаю, что я становлюсь довольно близко, должно быть, не хватает строки KEY
в коде. У вас есть какая-либо полезная информация или вы можете перенаправить меня в нужное место?
РЕДАКТИРОВАТЬ: Вот (я как-то сделал это на краске) фон, который я хочу получить:
Вам нужно создать еще один холст для вашего шаблона. И используйте это в fabric.Pattern, а затем используйте этот шаблонный объект для заполнения.
fabric.loadSVGFromURL(SVGURL, function(objects, options) {
fabric.Image.fromURL(patternURL, function(patternImage) {
svg = fabric.util.groupSVGElements(objects, options);
var patternSourceCanvas = new fabric.StaticCanvas();
patternSourceCanvas.add(patternImage);
patternSourceCanvas.setDimensions({
width: patternImage.getScaledWidth(),
height: patternImage.getScaledHeight()
});
patternSourceCanvas.renderAll();
var pattern = new fabric.Pattern({
source: patternSourceCanvas.getElement()
},
function(patternObj) {
svg.getObjects().forEach(function(e) {
e.fill = patternObj
});
canvas.add(svg);
});
})
})