|
GIF Movie Gear
Support: Tutorial
Emoji Searcher(JavaScript)
emoji merge(Python)
这是一个小程序,用来对两个图像进行png融合,生成一幅图像。生成表情特点为:在白色背景下显示“表面图”,在黑色背景显示“隐藏图”。故而在微信,QQ等社交软件时,缩略图显示表面图,而点开大图后显示隐藏图。
算法思想
设表面图(亮图,下方叠放白色背景)需要显示的灰度值为 $d_{\text {bright }} \in[0,255]$,里图(暗图,下方叠放黑色背景)需要显示的灰度值为 $d_{\text {dark }} \in[0,255]$。待求解的合成图是有透明度通道的png图像,其灰度值和不透明度分别是 $d \in[0,255]$ 和 $α∈[0,1]$。
根据背景叠放规则,可建立方程组$$\left\{\begin{array}{ll}d \times \alpha=d_{\text {dark }} & (\text {dark}) \\ d \times \alpha+255 \times(1-\alpha)=d_{\text{bright}} & (\text{bright})\end{array}\right.$$
解方程组得$$\left\{\begin{array}{l}\alpha=\frac{1}{255}\left(255-d_\text{bright}+d_\text {dark}\right) \\ d=\frac{1}{\alpha} d_\text {dark}\end{array}\right.$$
注:为使结果有意义( $α$ 和 $d$ 在设定值域内),需满足条件 $d_\text{bright}\geqslant d_\text {dark}$。实际程序中会将输入的两幅图像进行线性拉伸,以满足该条件。“亮度调节”功能可以调节两幅图像拉伸时的灰度值交汇点。
|
|