CSS:颜色混合模式

一、混合模式

css3的颜色混合模式,共有16种:

Photoshop图层CSS混合模式中文名称功能描述
normalnormal正常模式混合色的像素会透过所用的颜色显示出来
multiplymultiply正片叠底模式在“正片叠底”模式中,查看每个通道中的颜色信息,并将“基色”与“混合色”复合。
screenscreen滤色模式“滤色”模式与“正片叠底”模式正好相反,它将图像的“基色”颜色与“混合色”颜色结合起来产生比两种颜色都浅的第三种颜色
overlayoverlay叠加模式“叠加”模式把图像的“基色”颜色与“混合色”颜色相混合产生一种中间色。
darkendarken变暗模式在“变暗”模式中,查看每个通道中的颜色信息,并选择“基色”或“混合色”中较暗的颜色作为“结果色”。
lightenlighten变亮模式在“变亮”模式中,查看每个通道中的颜色信息,并选择“基色”或“混合色”中较亮的颜色作为“结果色”。
color-dodgecolor-dodge颜色减淡模式在“颜色减淡”模式中,查看每个通道中的颜色信息,并通过减小对比度使基色变亮以反映混合色。与黑色混合则不发生变化。
color-burncolor-burn颜色加深模式在“颜色加深”模式中,查看每个通道中的颜色信息,并通过增加对比度使基色变暗以反映混合色,如果与白色混合的话将不会产生变化。
hard-lighthard-light强光模式“强光”模式将产生一种强光照射的效果。如果“混合色”颜色“基色”颜色的像素更亮一些,那么“结果色”颜色将更亮;如果“混合色”颜色比“基色”颜色的像素更暗一些,那么“结果色”将更暗。
soft-lightsoft-light柔光模式柔光”模式会产生一种柔光照射的效果。如果“混合色”颜色比“基色颜色的像素更亮一些,那么“结果色”将更亮;如果“混合色”颜色比“基色”颜色的像素更暗一些,那么“结果色”颜色将更暗,使图像的亮度反差增大。
differencedifference差值模式在“差值”模式中,查看每个通道中的颜色信息,“差值”模式是将从图像中“基色”颜色的亮度值减去“混合色”颜色的亮度值,如果结果为负,则取正值,产生反相效果。
exclusionexclusion排除模式“排除”模式与“差值”模式相似,但是具有高对比度和低饱和度的特点。比用“差值”模式获得的颜色要柔和、更明亮一些。
huehue色相模式“色相”模式只用“混合色”颜色的色相值进行着色,而使饱和度和亮度值保持不变。
saturationsaturation饱和度模式“饱和度”模式的作用方式与“色相”模式相似,它只用“混合色”颜色的饱和度值进行着色,而使色相值和亮度值保持不变。
colorcolor颜色模式“颜色”模式能够使用“混合色”颜色的饱和度值和色相值同时进行着色,而使“基色”颜色的亮度值保持不变。“颜色”模式模式可以看成是“饱合度”模式和“色相”模式的综合效果。
luminosityluminosity亮度模式“亮度”模式能够使用“混合色”颜色的亮度值进行着色,而保持“基色”颜色的饱和度和色相数值不变。其实就是用“基色”中的“色相”和“饱和度”以及“混合色”的亮度创建“结果色”。

我们可以对以上16种混合模式进行分类:

分类名称混合模式名称描述
基础混合模式normal利用图层透明度和不透明度来控制与下面的图层混合
降暗混合模式darken,multiply,color-burn减色模式,滤掉图像中高亮色,从而达到图像变暗
加亮混合模式screen,lighten,color-dodge加色模式,滤掉图像中暗色,从而达到图像变亮
融合混合模式overlay,soft-light,hard-light用于不同程度的对上、下两图层的融合
变异混合模式difference,exclusion,hard-light用于制作各种变异的图层混合
色彩叠加混合模式hue,saturation,color,luminosity根据图层的色相,饱和度等基本属性,完成图层融合

二、混合模式的颜色效果计算公式

1.公式定义

混合公式定义:

Cm = B(Cb, Cs)

其中:
Cm:混合后的结果颜色
B:进行混合的公式
Cb:背景色
Cs:源色

混合公式的结果必须限制在颜色范围的最小值和最大值中。
混合函数的结果由背景的alpha调制。一个完全不透明的背景允许用混合模式来实现。一个透明的背景会导致最终的结果是源颜色和混合颜色之间的加权平均,权重由背景的alpha来控制。新颜色的值变成:

Cr = (1 - αb) x Cs + αb x B(Cb, Cs)

其中:
Cr:结果颜色
B:进行混合的公式
Cs:源颜色
Cb:背景色
ab:背景色的alpha

2.各种模式下的混合公式定义

模式公式描述效果
normalB(Cb, Cs) = Cs这是不指定混合的默认属性。混合公式简单选择源颜色。在这里插入图片描述
multiplyB(Cb, Cs) = Cb x Cs这是不指定混合的默认属性。混合公式简单选择源颜色。在这里插入图片描述
screenB(Cb, Cs) = 1 - [(1 - Cb) x (1 - Cs)]= Cb + Cs -(Cb x Cs)将Cb和Cs的颜色反转,然后相乘,最后再反转在这里插入图片描述
overlayB(Cb, Cs) = HardLight(Cs, Cb)当Cb的颜色比Cs的颜色深时,执行multiply渲染;当Cb的颜色比Cs的颜色浅时,执行screen渲染在这里插入图片描述
darkenB(Cb, Cs) = min(Cb, Cs)比较Cb和Cs的颜色分量(即R、G和B),选择较暗的颜色,即保留较小值。在这里插入图片描述
lightenB(Cb, Cs) = max(Cb, Cs)与darken类似,但选择较亮的颜色,即保留较大值在这里插入图片描述
color-dodgeif(Cb == 0)
B(Cb, Cs) = 0
else if(Cs == 1)
B(Cb, Cs) = 1
else
B(Cb, Cs) = min(1, Cb / (1 - Cs))
不改变颜色,但会将其调亮在这里插入图片描述
color-burnif(Cb == 1)
B(Cb, Cs) = 1
else if(Cs == 0)
B(Cb, Cs) = 0
else
B(Cb, Cs) = 1 - min(1, (1 - Cb) / Cs)
与color-dodge的作用相反,将颜色调暗在这里插入图片描述
hard-lightif(Cs <= 0.5)
B(Cb, Cs) = Multiply(Cb, 2 x Cs)
else
B(Cb, Cs) = Screen(Cb, 2 x Cs -1)
也是对multiply和screen的综合应用,但判断条件与overlay相反在这里插入图片描述
soft-lightif(Cs <= 0.5)
B(Cb, Cs) = Cb - (1 - 2 x Cs) x Cb x (1 - Cb)
else
B(Cb, Cs) = Cb + (2 x Cs - 1) x (D(Cb) - Cb)
with
if(Cb <= 0.25)
D(Cb) = ((16 * Cb - 12) x Cb + 4) x Cb
else
D(Cb) = sqrt(Cb)
与hard-light类似,但颜色更加柔和在这里插入图片描述
differenceB(Cb, Cs) = | Cb - Cs |取Cb和Cs颜色分量之差的绝对值,用较浅的颜色减去较深的颜色在这里插入图片描述
exclusionB(Cb, Cs) = Cb + Cs - 2 x Cb x Cs与difference类似,但对比度更低,颜色更柔和在这里插入图片描述
hueB(Cb, Cs) = SetLum(SetSat(Cs, Sat(Cb)), Lum(Cb))将Cb的颜色的饱和度与亮度跟Cs中对应位置的色相合并在这里插入图片描述
saturationB(Cb, Cs) = SetLum(SetSat(Cb, Sat(Cs)), Lum(Cb))将Cb的颜色的色相与亮度跟Cs中对应位置的饱和度合并在这里插入图片描述
colorB(Cb, Cs) = SetLum(Cs, Lum(Cb))将Cb的颜色的亮度跟Cs中对应位置的色相与饱和度合并在这里插入图片描述
luminosityB(Cb, Cs) = SetLum(Cb, Lum(Cs))将Cb的颜色的色相与饱和度跟Cs中对应位置的亮度合并在这里插入图片描述

注:
(1)色彩叠加混合模式分类中的4种模式涉及的SetLum、SetSat、 Sat、 Lum辅助函数定义可参阅W3C文档《Compositing and Blending Level 2
(2)为什么w3c标准中rgb取值范围是0~1,而css中的rgb取值范围是0~255?这是因为W3C标准中的RGB取值范围是基于小数的百分比表示,即0表示0%,1表示100%,而CSS中的RGB取值范围是基于整数的表示,即0表示最小值,255表示最大值。这种表示方法可以更方便地进行计算和转换,并且更符合人们的习惯,因此在CSS中被广泛使用。但是,在某些情况下,使用小数表示的RGB值可以更方便地进行一些数学计算,因此在一些图形处理软件中也会使用小数表示的RGB值。

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓风伴月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值