本文将介绍在一张图片中显示两种内容的原理,以及推荐一款我写的网页小工具,让你快速制作一张类似的图片。
在看文章的你不妨试着修改下少数派的主题色「明暗主题切换一下」,可以看到下面的图片在变化。



原理
生效的前提条件:
- 图片存储格式为 PNG查看图片的背景是纯白 or 纯黑
我们都知道图片格式有 PNG、JPEG、webP 等。PNG 可以保存图片的透明部分,我们将利用它可以保留透明部分的特性来实现一张图片塞下两张图片的内容。
视觉具有天生的弥补和联想能力,所以一张几千甚至上万个像素点的图片中,我们把它的像素点「均匀的」抠掉一半,基本不会影响整体观感。
类似于小时候特别流行的小瓷砖拼接的马赛克图案,如果瓷砖足够小,墙壁足够大,远看过去图片还是很「清晰的」
所以我们可以选择两张图片:
对于图片一进行奇数行的偶数列和偶数行的奇数列的像素抠掉;
对于图片二进行奇数行的奇数列和偶数行的偶数列的像素抠掉;
然后将两张图片重叠成一张图片;
我用表格大概模拟一下:
1 表示显示图片1的像素
2表示显示图片2的像素
1 | 2 | 1 | 2 | 1 | 2 | 1 |
2 | 1 | 2 | 1 | 2 | 1 | 2 |
1 | 2 | 1 | 2 | 1 | 2 | 1 |
这样我们就得到了一张混合了两张图片像素的图片,只是没有那么精细。毕竟每张图片我们只取了一半的像素过来,不过其实不影响最终视觉观感。
现在要做的就是如何:
- 在白色背景下只显示图片1在黑色背景下只显示图片2
这样就达到了切换黑白背景时同一张图片显示不同内容的目的。
PNG 的像素数据是 「红R、绿G、蓝B、透明A」 组成的,我们只要把 RGB 改成全部 255 或者 0 就会显示全白或者全黑的图片,然后通过设置 A,让该像素有不同的明暗度,来显示图片的黑白效果。
也就是假设背景是白色的时候,有一张黑白偏白的图片是看不见的。背景是黑色的时候,黑白偏黑的那张图片是看不见的。
现在很多平台「比如少数派」都有主题切换的功能,刚好基本都是在白色和黑色之间做切换,我们就可以做一张融合了2张黑白图片的图片,来达到主题变化带动图片变化的效果。
工具
如果你觉得这样的小巧思比较有意思,也想做一张这样的图,那么我也写了一个小工具供你使用。
