javascript 获取与混音混合模式的差异度量

f87krz0w  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(134)

mix-blend-mode: difference设置在文本上时,有没有一种方法可以获得差异的度量?比如字体颜色的平均变化?
基本上给出下面的代码:

.container {
    background-color: #fff;
}

.text {
    mix-blend-mode: difference;
    color: #000;
}

我怎样才能得到一个文本颜色已经100%改变的措施。文本原来是黑色的,但与mix-blend-mode: difference;的白色背景,它已经成为白色,这是100%。我想查询这种变化的方式。

mefy6pfw

mefy6pfw1#

我能想到的在浏览器脚本级别执行此操作的唯一方法是在Canvas渲染器上下文中重新创建场景。
此代码专门针对适用于您的问题的条款和条件,因此可能需要针对其他情况进行修改:

function getComputedContainerTextColor(element) {
  const canvas = document.createElement("canvas");
  canvas.width = 1;
  canvas.height = 1;

  const context = canvas.getContext("2d");

  const containerComputedStyle = window.getComputedStyle(element.parentElement);

  context.fillStyle = containerComputedStyle.backgroundColor;
  context.fillRect(0, 0, 1, 1);
  
  const textComputedStyle = window.getComputedStyle(element);

  context.globalCompositeOperation = textComputedStyle.mixBlendMode;
  context.fillStyle = textComputedStyle.color;
  context.fillRect(0, 0, 1, 1);

  const imageData = context.getImageData(0, 0, 1, 1);

  return [ imageData.data[0], imageData.data[1], imageData.data[2], imageData.data[3] ];
}

const text = document.querySelector(".text");
const color = getComputedContainerTextColor(text);

console.log(color);
.container {
    background-color: #fff;
}

.text {
    mix-blend-mode: difference;
    color: #000;
}
<div class="container">
  <span class="text">hello world</span>
</div>

这将在背景中创建一个1x1像素的画布,获取计算出的容器背景颜色以及计算出的文本元素的混合模式和颜色,以相同的顺序应用它们,然后提取图像数据-获取4个颜色索引(RGBA)。

相关问题