Search code examples
imagekineticjs

Image object color change using kineticjs


I am trying to convert an image to another color using kineticjs, actually my image will be on a layer and also a png one can i change only the image objects color? any help will be very greatful


Solution

  • You can replace non-transparent pixels with a new color using compositing.

    In particular source-atop compositing will replace all existing non-transparent pixels with any color you draw.

    enter image description hereenter image description here

    KineticJS does not currently offer compositing out-of-the-box, but you can easily use an html5 Canvas element to do the compositing and then use that element as an image source for a Kinetic.Image element.

    Here's example code and a Demo:

    var stage = new Kinetic.Stage({
      container: 'container',
      width: 350,
      height: 350
    });
    var layer = new Kinetic.Layer();
    stage.add(layer);
    
    var canvas=document.createElement('canvas');
    var ctx=canvas.getContext('2d');
    var kImage;
    
    var img=new Image();
    img.onload=start;
    img.src="https://dl.dropboxusercontent.com/u/139992952/multple/flower.png";
    function start(){
    
      cw=canvas.width=img.width;
      ch=canvas.height=img.height;
      ctx.drawImage(img,0,0);
    
      kImage=new Kinetic.Image({
        image:canvas,
        width:img.width,
        height:img.height,
        draggable:true,
      });
      layer.add(kImage);
      layer.draw();
    
      document.getElementById('makeGreen').onclick=function(){
        ctx.globalCompositeOperation='source-atop';
        ctx.fillStyle='lightgreen';
        ctx.fillRect(0,0,cw,ch);
        layer.draw();
      };
    
      document.getElementById('makeOriginal').onclick=function(){
        ctx.globalCompositeOperation='source-over';
        ctx.drawImage(img,0,0);
        layer.draw();
      };
    
    }
    body{padding:20px;}
    #container{
      border:solid 1px #ccc;
      margin-top: 10px;
      width:350px;
      height:350px;
    }
    <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v5.1.0.min.js"></script>
    <button id=makeGreen>Green</button>
    <button id=makeOriginal>Original</button>
    <div id="container"></div>