2016-06-30 5 views
1

J'utilise Konva.js pour faire des animations sur toile. J'ai des formes de cercle, avec un remplissage d'image, et voudrais appliquer une superposition de couleur/filtre à la forme (RGBA).Comment appliquer un filtre à une forme avec remplissage d'image dans KonvaJS?

Voici comment je crée l'objet Shape:

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'; 

Démo: http://jsbin.com/winugimeme/edit?js,output

The Docs outline an RGBA filter, mais pour autant que je peux dire qu'il ne peut être appliqué à Konva.Image articles.

Existe-t-il un moyen de retravailler mon code ci-dessus afin que je puisse appliquer des filtres à l'objet de forme/remplir l'image?

Répondre

2

Selon la documentation du filtre, vous devez mettre en cache la forme avant l'application de filtres 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); 

Note: jsbin démo ne fonctionnera pas avec cet exemple que l'image de remplissage doit être CORS activé (par exemple hébergé sur un même domaine) .

+0

J'ai essayé ce qui précède et j'ai obtenu l'erreur CORS susmentionnée. Y at-il un moyen de contourner la limitation CORS ..? Je charge des images d'un CDN. Je ne comprends pas vraiment pourquoi c'est un problème de CORS quand je peux lier des images du même CDN et les charger comme étiquettes d'image. Pourquoi les manipuler sur une toile provoque-t-il une erreur CORS? – Prefix

+0

Vous pouvez essayer cette astuce pour le faire fonctionner "imageObj.crossOrigin =" Anonymous ";" – lavrton

+0

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