Css 如何计算生成特定颜色所需的色调旋转?

Css 如何计算生成特定颜色所需的色调旋转?,css,css-filters,Css,Css Filters,我有一个白色的图像,我正在使用作为一个div的背景,我想颜色匹配的主题主色。我知道我可以做到: filter: sepia() saturate(10000%) hue-rotate(30deg); 并循环通过色调旋转查找颜色,但是否可以提前计算该值?鉴于指定的十六进制值非常暗,我想我还需要包含invert(%)过滤器 给定一个十六进制值689d94我需要做什么数学运算来计算所需的色调旋转和反转值以将白色背景图像转换为相同的颜色 编辑 下面是一个div的片段,白色背景图像被过滤成绿色。这里的诀

我有一个白色的图像,我正在使用作为一个div的背景,我想颜色匹配的主题主色。我知道我可以做到:

filter: sepia() saturate(10000%) hue-rotate(30deg);
并循环通过
色调旋转
查找颜色,但是否可以提前计算该值?鉴于指定的十六进制值非常暗,我想我还需要包含
invert(%)
过滤器

给定一个十六进制值
689d94
我需要做什么数学运算来计算所需的
色调旋转
反转
值以将白色背景图像转换为相同的颜色

编辑 下面是一个
div
的片段,白色背景图像被过滤成绿色。这里的诀窍是过滤的是整个
div
,而不仅仅是图像。如果我在
div
中输入一些文本,文本颜色也会变成绿色

div{
背景:url(http://richard.parnaby-king.co.uk/basket.svg)不重复滚动0 0透明;
背景尺寸:5em;
宽度:5em;
身高:5公分;
-webkit过滤器:倒置(25%)深褐色()饱和(100000%)色调旋转(174度);
过滤器:倒置(25%)深褐色()饱和(100000%)色调旋转(174度);
}

在这种情况下,关键是定义初始颜色。从技术上讲,白色、黑色或任何灰度都是真实的颜色——你不能使其饱和或旋转。你必须以某种方式对其进行“着色”,而乌贼墨过滤器是唯一能够进行某种着色的过滤器

如果您的图像是纯100%红色,则会更容易。然后您可以直接添加目标度数,并使用HSL为目标调整饱和度和亮度。对于白色起始点,第一步是转换和定义中间颜色,以便稍后对其进行饱和和旋转

让我们先将白色图像变暗,然后应用深褐色,以获得我们可以使用的“基本”颜色:

过滤器:亮度(50%)深褐色(1);
这将产生大约为以下值的RGB颜色值:

rgb(178160128)
第二步是给我们提供:

hsl(38,24.5%,60%);
基色结果
div{
背景:url(http://richard.parnaby-king.co.uk/basket.svg)不重复;
背景尺寸:5em;
宽度:5em;
身高:5公分;
-webkit过滤器:亮度(50%)深褐色(1);
滤光片:亮度(50%)乌贼墨(1);
}

如果正在使用svg,则

您可以使用一些文本编辑器打开svg文件,复制并粘贴到html文件,然后根据需要更改路径颜色

在下面的示例代码中。。。我刚刚更改了中心环的路径颜色。 希望这有帮助

var imgg=document.getElementById(“路径”);
imgg.style=“填充:#4242”;

公认的答案是错误的。色调旋转不保存饱和度或亮度,您必须进行疯狂的数学运算才能得出正确的值。更简单的方法——这将产生正确的结果——是做一个引用SVG过滤器的CSS过滤器。SVG过滤器中的feColorMatrix原语允许您直接选择颜色,就像这样。取你的颜色#424242-将每种颜色的十六进制值除以#FF(.257),然后将它们放在第五列,颜色矩阵的前三行。像这样:

div{
背景:url(http://richard.parnaby-king.co.uk/basket.svg)不重复滚动0 0透明;
背景尺寸:5em;
宽度:5em;
身高:5公分;
-webkit筛选器:url(#着色);
过滤器:url(#彩色化);
}

/过滤器>

是的,这是一个实际的背景图像。然后(再次确认)…这是不可能的,过滤器应用于实际图像。您在这个问题上施加了什么限制?我认为使用filter:url(#mySvgFilter)或多或少可以实现这一点。这需要能够在页面的某个位置包含svg元素,或者在某个位置承载svg文件。这是一个可行的解决方案吗?奇怪的是,在使用颜色矩阵时,我无法使颜色精确匹配(尽管它们应该匹配),但这可能是我误解了与混合模式相关的内容。另外,如果我可以问一下,您试图解决的底层问题是什么?最初,我试图通过仅使用一个svg图像来减少用户需要发出的http请求数量(篮子在页面的其他位置使用),我只想使用CSS更改颜色。最终,我确实使用了另外两张图片(一张是上面的深绿色,另一张是黑色),但这仍然是我在寻找答案的一个问题。至于限制-我正在寻找一系列步骤或程序,我可以遵循这些步骤或程序,给定十六进制输入,给我一个过滤器和值列表,我需要使用这些过滤器和值来给白色图像上色。是否可以使用内嵌svg过滤器?还值得注意的是@K3N我在这里有一个非常类似的问题:。也许你有答案?谢谢不幸的是,这个答案是错误的。它假设色调旋转在HSL空间中运行。事实并非如此。CSS色调旋转基于SVG过滤器规范中定义的基础色调旋转,它没有HSL颜色空间的概念。糟糕的结果不是浮点近似的结果,而是因为色调旋转会对颜色进行大量剪裁,尤其是那些“极端”的颜色-R/G/B的数量极不相等。这是一个很好的尝试,但完全有误导性。必须是背景图像。@RichardParnaby King还添加了背景图像大小写。。我会使用z索引制作图像背景。。无论如何我已经为背景图像做了一个变通,SVG也可以用作背景图像。这看起来是一个不错的解决方案。但你能告诉我如何从424242和FF获得.257、.257、.257吗?我试着去a,用hex 42除以hex FF,它告诉我hex值:0余数:42,十进制值:0余数:66。hex#42=十进制4*16+2