[英]Is there a way to invert all colors on the page with a button click, using jQuery and/or CSS?
[英]Invert Only White Colors To Black With JQuery On a Page
如果是的话,是否有可能使用jquery将html页面上的白色颜色反转为黑色? 不寻找反转所有颜色,这是有效的。 像这样:
var css = 'html {-webkit-filter: invert(100%);' +
'-moz-filter: invert(100%);' +
'-o-filter: invert(100%);' +
'-ms-filter: invert(100%); }'
但我希望只将白色像素反转为整个页面的黑色像素,包括图像。
一个有趣的问题,恕我直言:)
我不会委托给css("color")
因为该元素可以从父母那里继承它的颜色。 最可靠的方法是getComputedStyle
,它返回element的实际CSS属性,无论浏览器如何计算它。
注意颜色可以是其中一种树形式:颜色名称如'white',短值如'#FFFFFF'或'#ffffff'或rgb / rgba如rgb(255,255,255)。 你应该注意所有的情况!
所以,代码应该类似于以下代码:
$(body').find('*').each(function(){
var color = window.getComputedStyle($(this).get(0), null).backgroundColor;
if ((color.toLowerCase() == "white") ||
(color.toLowerCase() == "#ffffff") ||
(color.toLowerCase() == "rgb(255,255,255)")) {
$(this).css("background-color", "black");
}
});
对于图像,您可以使用画布。 在相同的元素循环内:
if ($(this).attr("tagName") == "img"){
invertImage($(this).get(0));
}
function invertImage(img){
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var imageData = ctx.getImageData(0, 0, img.width, img.height);
var data = imageData.data;
for (var i = 0; i < data.length; i += 4) {
if ((data[i] == 255) && (data[i+1] == 255) && (data[i+2] == 255)){
data[i] = 0;
data[i+1] = 0;
data[i+2] = 0;
}
}
ctx.putImageData(imageData, 0, 0);
$(img).get(0).src = canvas.toDataURL("image/png");
}
最后,如果你想处理“几乎白色”的颜色,例如“254,252,255”,你需要计算亮度分量
Y = 0.299 * R + 0.587 * G + 0.114 * B
和阈值结果类似>= 250
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.