Change color Image in Canvas

Multi tool use
Multi tool use


Change color Image in Canvas



I want to change color a Image in canvas



this is the Image



enter image description here



You can see there is a Image transparent I was try using PutImgData but my transparent is changing color
Is there anyway to change color the car and money only ?
I was using this code :


var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"),
image = document.getElementById("testImage");
canvas.height = canvas.width = 100;
ctx.fillStyle = 'red';
ctx.fillRect(10,10,20,10);
ctx.drawImage(image,0,0);

var imgd = ctx.getImageData(0, 0, 45, 45),
pix = imgd.data;

for (var i = 0, n = pix.length; i <n; i += 4) {
if(pix[i+3]==0)
{continue;}
pix.length[i]=r|pix.length[i];
pix.length[i+1]=g|pix.length[i+1];
pix.length[i+2]=b|pix.length[i+2];
pix[i + 3] = 255;
}

ctx.putImageData(imgd, 0, 0);




1 Answer
1



To mix manually you would have to apply a different formula to mix foreground (new color) and background (image) to preserve anti-aliased pixels (and just in case: the image included in the question is not actually transparent, but I guess you just tried to illustrate transparency using the solid checkerboard background?).



I would suggest a different approach which is CORS safe and much faster (and simpler) -



There are a couple of ways to do this: one is to draw in the color you want, then set composite mode to destination-in and then draw the image, or draw the image, set composite mode to source-in and then draw the color.


destination-in


source-in



image




var img = new Image; img.onload = draw; img.src = "//i.stack.imgur.com/cZ0gC.png";
var ctx = c.getContext("2d");

function draw() {
// draw color
ctx.fillStyle = "#09f";
ctx.fillRect(0, 0, c.width, c.height);

// set composite mode
ctx.globalCompositeOperation = "destination-in";

// draw image
ctx.drawImage(this, 0, 0);
}


<canvas id=c></canvas>




var img = new Image; img.onload = draw; img.src = "//i.stack.imgur.com/cZ0gC.png";
var ctx = c.getContext("2d");

function draw() {
// draw image
ctx.drawImage(this, 0, 0);

// set composite mode
ctx.globalCompositeOperation = "source-in";

// draw color
ctx.fillStyle = "#09f";
ctx.fillRect(0, 0, c.width, c.height);
}


<canvas id=c></canvas>



To reset comp. mode back to normal use:


// reset comp. mode
ctx.globalCompositeOperation = "source-over";



As with getImageData(), the drawback with this technique is that your canvas must only hold the content of this image while doing this process. A workaround if the image needs to be colored and mixed with other content is to use an off-screen canvas to do the processing, then draw that canvas back onto the main canvas.


getImageData()





if I right this solution make transparent color get the canvas background?
– Dương Đỗ Đại
Aug 16 '17 at 9:57





@DươngĐỗĐại yes, anything behind the canvas will show through (example). However, if you intend to fill the background inside the canvas itself you would have to do an additional step (example).
– epistemex
Aug 16 '17 at 10:01






Then if I have 2 img one is transparent one is not in coordinates (0,0). The one not transparent behind then transparent Img still get color Img behind ?
– Dương Đỗ Đại
Aug 17 '17 at 3:44





@DươngĐỗĐại that is not part of the original question and I think I have provided you the needed information for this question. Please consider accepting the answer and open a new question with the new intentions.
– epistemex
Aug 17 '17 at 22:24






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

zSDTT7VZK6jr TiL1n84bLLNUYMv6b8YJR83LUs,sgd66K9lFnqww e,DEzv VnTdbY7DEY
KvdU cj01tLys85oE1TFxyNO,Py

Popular posts from this blog

Rothschild family

Cinema of Italy