2016-06-30 23 views
1

Ich verwende Konva.js, um einige Leinwandanimationen zu machen. Ich habe Kreisformen mit einer Bildfüllung und möchte eine Farbüberlagerung/Filter auf die Form anwenden (RGBA). DieseWie man einen Filter auf eine Form mit Bildfüllung in KonvaJS anwendet?

ist, wie ich die Schaffung der Shape-Objekt:

var konvaObject = new Konva.Circle({ 
    x: 100, 
    y: 100, 
    radius: 300, 
    stroke: this.color, 
    strokeWidth: 6, 
    fillPatternRepeat: 'no-repeat', 
}); 

// load the image into the shape: 
var imageObj = new Image(); 
imageObj.onload = function() { 
    konvaObject.fillPatternImage(imageObj); 
    konvaObject.draw(); 
} 
imageObj.src = 'www.demo.com/anImageName.png'; 

Demo: http://jsbin.com/winugimeme/edit?js,output

The Docs outline an RGBA filter, aber soweit ich es kann sagen, kann nur auf Konva.Image Elemente angewendet werden.

Gibt es eine Möglichkeit, meinen obigen Code zu überarbeiten, so dass ich Filter auf das Formobjekt/Füllbild anwenden kann?

Antwort

2

Nach Filter Dokumentation, müssen Sie Form vor der Anwendung Filter cachen http://konvajs.github.io/api/Konva.Filters.html#RGBA

node.cache(); 
node.filters([Konva.Filters.RGBA]); 
node.blue(120); 
node.green(200); 
node.alpha(0.3); 

Hinweis: jsbin Demo wird nicht mit diesem Beispiel arbeiten als gefülltes Bild sollte CORS (zB gehostet auf derselben Domäne) aktiviert werden .

+0

Ich versuchte das oben genannte und erhielt den oben erwähnten CORS-Fehler. Gibt es eine Möglichkeit, die CORS-Einschränkung zu umgehen? Ich lade Bilder von einem CDN. Ich verstehe nicht wirklich, warum das ein CORS-Problem ist, wenn ich Bilder von derselben CDN verknüpfen und sie als Image-Tags laden kann. Warum verursacht die Manipulation auf der Leinwand einen CORS-Fehler? – Prefix

+0

Sie können diesen Trick versuchen, damit es funktioniert "imageObj.crossOrigin =" Anonymous ";" – lavrton

+0

http://jsbin.com/licusaxeqe/2/edit?js,output – lavrton