假设这些是我应用于图像的滤镜。我想知道这些过滤器背后的数学:
filter: contrast(1.3) brightness(0.8) sepia(0.3) saturate(1.5) hue-rotate(-20deg);
我正在寻找特定于CSS的计算或应用于每个像素RGB或整体的任何通用算法。任何帮助都非常感谢。
答案 0 :(得分:5)
传递CSS过滤器函数的值基于元素。
如果您要添加sepia(0.3)
,则会应用30%的棕褐色过滤器。
将输入图像转换为棕褐色。传递的参数定义了 转换比例。 100%的价值完全是棕褐色。一个 值0%使输入保持不变。 0%到100%之间的值是 关于效果的线性乘数。金额超过100%的是 允许但UAs必须将值限制为1。
如果您要添加contrast(1.3)
,这会使图像的对比度提高130%,依此类推。
您可以在此处阅读更多信息: https://developer.mozilla.org/en/docs/Web/CSS/filter
=== 更新 ===
以下是我遇到的一些算法:
<强>褐色强>
outputRed = (inputRed * .393) + (inputGreen *.769) + (inputBlue * .189)
outputGreen = (inputRed * .349) + (inputGreen *.686) + (inputBlue * .168)
outputBlue = (inputRed * .272) + (inputGreen *.534) + (inputBlue * .131)
<强>灰度强>
Gray = (Red * 0.3 + Green * 0.59 + Blue * 0.11)
来源:http://www.tannerhelland.com/3643/grayscale-image-algorithm-vb6/
色调和饱和度
color = blend2(rgb(128, 128, 128), hueRGB, saturation);
if (lightness <= -1)
return black;
else if (lightness >= 1)
return white;
else if (lightness >= 0)
return blend3(black, color, white, 2 * (1 - lightness) * (value - 1) + 1)
else
return blend3(black, color, white, 2 * (1 + lightness) * (value) - 1)
来源:https://stackoverflow.com/a/9177602/5814976
<强>亮度强>
colour = GetPixelColour(x, y)
newRed = Truncate(Red(colour) + brightness)
newGreen = Truncate(Green(colour) + brightness)
newBlue = Truncate(Blue(colour) + brightness)
PutPixelColour(x, y) = RGB(newRed, newGreen, newBlue)