最近有一个需求说是需要换图片颜色。
最后其实给我拒绝了,因为我说很难实现。但是心中还是上心了。
下面是替换颜色的方法。效果还行吧。一般般
主要代码还是copy别人的。这里就写一下,当记录
根据循环可以得出
图片组成是ARGB格式,第一个是透明度,后续rgba
for (var j = 0; j < pdata.length; j+=4) { if (pdata[j] === 95) pdata[j] = colorArr[0]; if (pdata[j - 1] === 170) pdata[j-1] = colorArr[1]; if (pdata[j - 2j] === 129) pdata[j-2] = colorArr[2]; } 复制代码
所以0,1,2,3的顺序
替换的rgb颜色应该是3,2,1
得到数组rgb:data[i],data[i-1],data[2]
替换方式看上面代码
<!DOCTYPE html> <html> <style> #btn { width: 100px; height: 50px; background: coral; position: fixed; top: 0; } </style> <head> <script type="text/javascript"> var c, ctx,myImage; function displayImage() { myImage = new Image(); myImage.src = "1719ebbc83be39f0.webp.jpg"; c = document.getElementById("myCanvas"); if (c.getContext) { ctx = c.getContext("2d"); myImage.onload = function() { ctx.drawImage(myImage, 0, 0); } } } //colorArr 替换后的颜色 // 替换前的颜色 function getColorData(colorArr, color2) { imageD = ctx.getImageData(0, 0, myImage.width, myImage.height); var pdata = imageD.data; for (var j = 0; j < pdata.length; j+=4) { if (pdata[j] === color2[0]) pdata[j] = colorArr[0]; if (pdata[j + 1] === color2[1]) pdata[j + 1] = colorArr[1]; if (pdata[j + 2] === color2[2]) pdata[j + 2] = colorArr[2]; } ctx.putImageData(imageD, 0, 0); } function colorChange() { // rgb颜色 getColorData([102, 51, 153], [95, 170, 129]); } </script> </head> <body onload="displayImage()"> <p>原始图片:</p> <img id="myPhoto" src="1719ebbc83be39f0.webp.jpg"> <p>Canvas图片:</p> <canvas id="myCanvas" width="200" height="200"></canvas> <button id="btn" onclick="colorChange()">变颜色啦!</button> </body> </html>复制代码