关于CSS:-webkit-filter的hue-rotate在Chrome中似乎无法产生正确的结果

-webkit-filter's hue-rotate does not seem to produce correct results in chrome

如果使用以下方法将色相旋转90度:

1
2
3
4
.foo
{
  -webkit-filter: hue-rotate(90deg);
}

它会旋转色相,但看起来不正确。 例如,如果我在photoshop中执行相同的转换,则会得到不同的结果。 我还注意到,Chrome和Safari的结果有所不同。

如果我截取屏幕截图并在photoshop中打开经过修改的图像(通过-webkit-filter),则可以看到色相仅旋转了60度,并且饱和度也降低了。

有没有办法让Webkit浏览器更可靠地旋转色调,或者我是否缺少有关此过滤器方法的基本知识。

这是一个说明问题的小提琴:

http://jsfiddle.net/xv5Ah/1/


我认为您在Chrome中遇到了一个错误,如果我在hsl中声明颜色并添加90deg,结果将是不同的:http://jsfiddle.net/HrHpA/。

1
2
3
4
5
6
7
8
9
10
11
12
div {
    width:            50px;
    height:           50px;
    margin-bottom:    10px;
    /* hsl(131+90,100%,50%) */
    background: hsl(221,100%,50%);
}

.hue {
  background: hsl(131,100%,50%);
  -webkit-filter: hue-rotate(90deg);  
}

可能有不同的颜色模型可以解释这个问题,但是在我看来,结果相差甚远。

我会在https://code.google.com/p/chromium/issues/entry提交错误报告


这不是错误。色相旋转近似于RGB空间中的色相旋转-对于某些颜色(例如高度饱和),结果非常不准确。请查看此问题的答案,以查看此裁剪严重扭曲了结果:

为什么色相旋转+ 180deg和-180deg不能产生原始颜色?


他们实际上都是正确的。我认为您可能会搞砸的地方是Photoshop使用HSB颜色模型,而CSS使用HSL。

仅供参考:

在HSB中,(B)正确性从0%的黑色变为100%的全彩色。

在HSL中,(L)色度从0%的黑色变为50%的全彩色,再到100%的白色。