混合模式

混合模式（英语：blend modes / mixing modes，部分软件译作合成模式），是在计算机图形领域中用于决定将图层以何种形式叠放在其他图层之上的一类功能，常见于图像编辑软件以及视频软件。
== 基本原理 ==
在了解混合模式的原理前，需要了解以下元素：
* 选中层 (Active Layer)：当前选中的图层，即当前应用混合模式的图层，以下称为A层。
* 背景层 (Background Layer)：在选中层之下的图层，以下称为B层。
* 混合色 (Blend Color，源颜色)：选中层各个像素的颜色，以下称为A。
* 基色 (Base Color，基础颜色)：背景层各个像素的颜色，以下称为B。
* 结果色 (Result Color，结果颜色)：混合色与基色重叠的部分，在经过相应计算后产生的像素颜色，以下称为C。
* 颜色（Color）：以下所有颜色值均是在8位RGBA颜色空间(0~255，0~255，0~255，0~1)运算得到，对于CMYK空间、LAB空间、HSL空间等，需要转化为RGBA空间参与运算后再转换回去。下面叙述的颜色运算方法也均默认为在8位RGBA空间。
*Alpha通道 (Alpha Channel)，即像素的不透明度，其值会影响混合模式的结果色，但与RGB部分不同，其影响结果色的算法需单独列出。
混合模式的核心原理则是，针对选中层与背景层的重叠部分，混合模式会对其基色和混合色的RGB通道进行相应的运算，来得到结果色。
== 声明 ==
以下分类中的颜色混合模式为After Effects中的颜色混合，对于 Photoshop 等调色、绘画软件，Vegas Pro、Premiere等视频编辑软件中涉及的混合模式的算法可能存在或多或少的差异，同时可能因为外语体系下的软件的汉化译制不同，可能会将结果显示混合模式相似的译为同名，请注意甄别！
部分内容在不同软件中并不通用，将通用性低的略去，如“经典颜色加深”和“颜色加深”，将“经典颜色加深”的叙述略去。
这些混合模式背后的概念和算法的深入信息并不是必须要掌握的，仅了解即可。
本条目旨在为混合模式的使用提供引导性的帮助，在阅读时如非必需可以只阅览相应混合模式的结果色概述，尤其是加粗的部分。
=== 简化说明 ===
* 
* 
* 如无特殊说明，结果都不可溢出，即不会低于 0，不会高于 255，溢出全部清除，即按溢出情况取 0 或 255。
== 分类 ==
根据混合模式结果之间的相似性，混合模式细分为八个类别。
=== “正常”类别 ===
选项包括：正常、溶解、动态抖动溶解。除非不透明度小于源图层的 100%，否则像素的结果颜色不受基础像素的颜色影响。“溶解”混合模式使源图层的一些像素变成透明的。
==== 正常（Normal） ====
结果颜色是源颜色。
f(A，B)=A
==== 溶解（Dissolve） ====
每个像素的结果颜色随机选自源颜色或基础颜色。结果颜色是源颜色的概率取决于源的不透明度。如果源的不透明度是100%，则结果颜色是源颜色。如果源的不透明度是0%，则结果颜色是基础颜色。
f(A，B)=\frac{A}{B}
==== 动态抖动溶解（Dancing Dissolve） ====
效果与“溶解”相同，但每帧都会重新计算概率函数，因此结果随时间而变化。
f(A，B，t)=\frac{A}{B}
=== “减少”类别 ===
选项包括：变暗、相乘、颜色加深、经典颜色加深、线性加深、深色。这些混合模式往往会使颜色变暗，其中一些混合颜色的方式与在绘画中混合彩色颜料的方式大致相同。
==== 变暗（Darken） ====
每个结果颜色通道值是源颜色通道值和相应的基础颜色通道值中的较低者（较深者）。
f(A，B)=Min(A，B)
==== 相乘（Multiply） ====
常译为“正片叠底”。对于每个颜色通道，该模式会将源颜色通道值与基础颜色通道值相乘，再除以8-bpc（255）、16-bpc（32,767）或 32-bpc（2,147,483,647）像素的最大值，具体取决于项目的颜色深度。
结果颜色决不会比原始颜色明亮。如果任一输入颜色是黑色，则结果颜色是黑色。
如果任一输入颜色是白色，则结果颜色是其他输入颜色。
此混合模式模拟在纸上用多个记号笔绘图或将多个彩色透明滤光板置于光照前面。在与除黑色或白色之外的颜色混合时，具有此混合模式的每个图层或画笔将生成深色。
f(A，B)=\frac{A\times B}{255}（8-bpc条件）
==== 颜色加深（Color Burn） ====
结果颜色是源颜色变暗，以通过增加对比度来反映基础图层颜色。原始图层中的纯白色不会更改基础颜色。
f(A，B)=A-\frac{A@\times B@}{B}
==== 线性加深（Linear Burn） ====
结果颜色是源颜色变暗以反映基础颜色。纯白色不会生成任何变化。
f(A，B)=A+B-255
==== 较深的颜色（Darken Color） ====
每个结果像素是源颜色值和相应的基础颜色值中的较深颜色。“深色”类似于#变暗（Darken），但是“深色”不对各个颜色通道执行操作，而是直接求和比较后执行。
f(A，B)=\left\{\begin{matrix}
A，sum(A)≤sum(B)，
\\ 
B，sum(A)>sum(B).
\end{matrix}\right.
=== “添加”类别 ===
选项包括：变亮、相加、滤色、颜色减淡、经典颜色减淡、线性减淡、浅色。这些混合模式往往会使颜色变亮，其中一些混合颜色的方式与混合投影光的方式大致相同。
==== 变亮（Lighten） ====
每个结果颜色通道值是源颜色通道值和相应的基础颜色通道值中的较高者（较亮者）。
f(A，B)=Max(A，B)
==== 相加（Add） ====
每个结果颜色通道值是源颜色和基础颜色的相应颜色通道值的和。结果颜色绝不会比任一输入颜色深。在部分软件里面被错译为“线性减淡”。
f(A，B)=A+B
==== 滤色（Screen） ====
乘以通道值的补色，然后获取结果的补色。结果颜色绝不会比任一输入颜色深。使用“滤色”模式类似于同时将多个照片幻灯片投影到单个屏幕上。
f(A，B)=255-\frac{A@\times B@}{255}
==== 颜色减淡（Color Dodge） ====
结果颜色是源颜色变亮，以通过减小对比度来反映基础图层颜色。如果源颜色是纯黑色，则结果颜色是基础颜色。
f(A，B)=A+\frac{A\times B}{B@}
==== 浅色（Lighten Color） ====
每个结果像素是源颜色值和相应的基础颜色值中的较亮颜色。“浅色”类似于#变亮（Lighten），但是“浅色”不对各个颜色通道执行操作，而是直接求和比较后执行。
f(A，B)=\left\{\begin{matrix}
B，sum(A)≤sum(B)，
\\ 
A，sum(A)>sum(B).
\end{matrix}\right.
=== “复杂”类别 ===
选项包括：叠加、柔光、强光、线性光、亮光、点光、实色混合。这些混合模式对源和基础颜色执行不同的操作，具体取决于颜色是否比 50% 灰色浅。
==== 叠加（Overlay） ====
将输入颜色通道值相乘或对其进行滤色，具体取决于基础颜色是否比 50% 灰色浅。结果保留基础图层中的高光和阴影。
当A层小于128时取#相乘（Multiply），A层大于128时取#滤色（Screen）。
==== 柔光（Soft Light） ====
使基础图层的颜色通道值变暗或变亮，具体取决于源颜色。结果类似于漫射聚光灯照在基础图层上。对于每个颜色通道值，如果源颜色比 50% 灰色浅，则结果颜色比基础颜色浅，就好像减淡一样。如果源颜色比 50% 灰色深，则结果颜色比基础颜色深，就好像加深一样。具有纯黑色或白色的图层明显变暗或变亮，但是没有变成纯黑色或白色。
f(A，B)=\left\{\begin{matrix}
\frac{A×B}{128}+(\frac{A}{255})^2 (255-2B)，B≤128，
\\ 
\frac{A×B@}{128}+\sqrt{\frac{A}{255}}×(2B-255)，B>128.
\end{matrix}\right.
==== 强光（Hard Light） ====
将输入颜色通道值相乘或对其进行滤色，具体取决于原始源颜色。结果类似于耀眼的聚光灯照在图层上。对于每个颜色通道值，如果基础颜色比 50% 灰色浅，则图层变亮，就好像被滤色一样。如果基础颜色比 50% 灰色深，则图层变暗，就好像被相乘一样。此模式用于在图层上创建阴影外观。
当B层小于128时取#相乘（Multiply），A层大于128时取#滤色（Screen）。和叠加仅运算条件不同。
==== 线性光（Linear Light） ====
通过减小或增加亮度来加深或减淡颜色，具体取决于基础颜色。如果基础颜色比 50% 灰色浅，则图层变亮，因为亮度增加。如果基础颜色比 50% 灰色深，则图层变暗，因为亮度减小。
f(A，B)=A+2B-255
==== 亮光（Vivid Light） ====
通过增加或减小对比度来加深或减淡颜色，具体取决于基础颜色。如果基础颜色比 50% 灰色浅，则图层变亮，因为对比度减小。如果基础颜色比 50% 灰色深，则图层变暗，因为对比度增加。
f(A，B)=\left\{\begin{matrix}
A-\frac{A@\times (255-2B)}{2B}，B≤128，
\\ 
A+\frac{A\times(2B-255)}{2B@}，B>128.
\end{matrix}\right.
==== 点光（Pin Light） ====
根据基础颜色替换颜色。如果基础颜色比 50% 灰色浅，则替换比基础颜色深的像素，而不改变比基础颜色浅的像素。如果基础颜色比 50% 灰色深，则替换比基础颜色浅的像素，而不改变比基础颜色深的像素。
f(A，B)=\left\{\begin{matrix}
Min(A，2B)，B≤128，
\\ 
Min(A，2B-255)，B>128.
\end{matrix}\right.
==== 纯色混合（Hard Mix） ====
提高源图层上蒙版下面的可见基础图层的对比度。蒙版大小确定对比区域；反转的源图层确定对比区域的中心。
该模式仅包含6种基本颜色，组合共8种颜色。
f(A，B)=\left\{\begin{matrix}
255，A+B≥255，
\\ 
0，A+B<255.
\end{matrix}\right.
=== “差异”类别 ===
选项包括：差值、经典差值、排除、相减、相除。这些混合模式基于源颜色和基础颜色值之间的差异创建颜色。
==== 差值（Difference） ====
对于每个颜色通道，从浅色输入值中减去深色输入值。使用白色绘画会反转背景颜色；使用黑色绘画不会生成任何变化。
f(A，B)=|A-B|
==== 排除（Exclusion） ====
创建与“差值”模式相似但对比度更低的结果。如果源颜色是白色，则结果颜色是基础颜色的补色。如果源颜色是黑色，则结果颜色是基础颜色。
f(A，B)=A+B-\frac{A\times B}{128}
==== 相减（Subtrace） ====
从基础颜色中减去源颜色。如果源颜色是黑色，则结果颜色是基础颜色。在 32-bpc 项目中，结果颜色值可以小于 0（溢出）。
f(A，B)=B-A
==== 相除（Division） ====
基础颜色除以源颜色。如果源颜色是白色，则结果颜色是基础颜色。在 32 bpc 的项目中，结果颜色值可以大于 1.0（溢出）。
f(A，B)=\frac{B}{A}\times 255
=== “HSL”类别 ===
选项包括：色相（H）、饱和度（S）、颜色（H+S）、明度（L）。这些混合模式将颜色的 HSL 表示形式的一个或多个组件（色相、饱和度和发光度）从基础颜色传递到结果颜色。
将颜色简单记为HSL C。HSL和RGB的互相变换这里不做介绍。
==== 色相（Hue） ====
结果颜色具有基础颜色的发光度和饱和度以及源颜色的色相。
HSL C = HB + SA + LA
==== 饱和度（Saturation） ====
结果颜色具有基础颜色的发光度和色相以及源颜色的饱和度。
HSL C = HA + SB + LA
==== 颜色（Color） ====
结果颜色具有基础颜色的发光度以及源颜色的色相和饱和度。此混合模式保持基础颜色中的灰色阶。此混合模式用于为灰度图像上色和为彩色图像着色。
HSL C = HB + SB + LA
==== 发光度（Luminosity） ====
结果颜色具有基础颜色的色相和饱和度以及源颜色的发光度。此模式与“颜色”模式相反。
HSL C = HA + SA + LB
=== 含不透明度的运算 ===
此章节过于复杂，不做公式上的详细叙述。详情可自行阅读参考文献。
实例：“相加”和“线性减淡”，二者在全部取不透明度为100%的情形时的效果是完全一样的，但是当不透明度开始变化时差距显著。
==== “遮罩”类别 ====
选项包括：模板 Alpha、模板亮度、轮廓 Alpha、轮廓亮度。这些混合模式实质上将源图层转换为所有基础图层的遮罩。
== 特殊实现 ==
* 在 Vegas 中，通过“自定义混合模式”可以实现平铺、扭曲和翻转等效果。
== 参见 ==
* 图层混合模式详细介绍
* 
* RGB颜色混合
* Porter/Duff 合成和混合模式
* 关于不透明度，填充，在8种特殊混合模式的异同
* 混合模式计算公式