二维码换了颜色还能扫的原因,以及读不出来的临界点
二维码不一定要是黑白的
提到二维码,多数人脑子里浮现的是黑白图案,其实换了颜色照样能扫。红配白、藏青配白、绿配白,配合企业品牌色做出来的二维码,相信不少人都见过。
扫码用的扫描器并不是在识别颜色本身。它识别的是「明亮的部分」与「暗的部分」之间的对比度,也就是明暗差。黑白二维码之所以最好读,原因就在于黑与白的对比度达到了最大值。
换句话说,只要是「暗色」与「亮色」的组合,无论用什么颜色,二维码都能正常工作。深红配白、深蓝配白、深绿配白,这些搭配的对比度都足够,扫起来不会有问题。真正决定成败的不是色相,而是明暗差本身。
绝对不能用的配色
反过来,也有一些配色会让二维码彻底读不出来。其中最危险的是「明暗反转」。
暗背景配亮模块:二维码的规格规定,代表数据的方格(模块)用「暗色」,背景用「亮色」。把两者反过来,也就是白色模块配黑色背景,很多扫描器就无法正确读取。有一部分扫描器支持反色,但不能指望所有设备都读得出来。
对比度过低的组合:黄配白、浅蓝配白、粉配橙。亮色与亮色搭在一起对比度很低,扫描器分辨不出模块的边界。同理,深蓝配黑、深绿配深褐这类暗色与暗色的组合,读取也同样困难。
红配绿的组合:对色觉多样性(色弱)的人来说,红与绿是最难分辨的一对颜色。即使扫描器读得出来,人眼也很难意识到「这里有一个二维码」。从无障碍的角度看,这种配色应当避开。
对比度比值的参考线
要判断二维码能不能稳定读取,实务上的经验值是模块与背景的对比度做到 4:1 以上。相机的解码器并不看色相,而是按明暗差的阈值来划定模块边界,因此只要亮度差达到这个水准,绝大多数扫描器都能稳定读取。顺带说一句,Web 文字可读性里常提到的 WCAG(Web Content Accessibility Guidelines)4.5:1,是给人眼读文字用的另一套标准,并不能拿来保证扫得出来。
对比度的确认很简单,用网上的免费工具(例如 WebAIM Contrast Checker)就能完成。把模块的色值和背景的色值填进去,工具会直接算出对比度。不过数值合格只是起点:解码器是按局部区域的明暗阈值做二值化处理的,明度差不够时模块边界的判定就会变得不稳定。印刷用的配色最好在纸上打样后再实际扫一次,屏幕上看着够,印出来偏浅的情况并不少见。
拿不准的时候,回到「模块用黑色或深色、背景用白色或浅色」这条基本原则最稳妥。为了追求设计感反而扫不出来,那就本末倒置了。
渐变和照片能不能当背景
把渐变或照片放在二维码背后,技术上做得到,但风险很高。背景颜色会随位置变化,某些模块处的对比度可能不够,从而出现读取失败。
如果确实想用渐变背景,安全的做法是在二维码四周留出足够的白色空白(静区),二维码本身则放在单色背景上。用设计装点二维码的「外侧」,二维码「内部」保持简洁,这样分工才能兼顾设计感与可读性。
要把二维码叠在照片上时,有一个好用的技巧是在二维码下面铺一块半透明的白色方块。这样既保留了照片的氛围,又能确保扫码所需的对比度。
用颜色玩出花样的乐趣
只要守住规则,拿二维码的颜色做文章其实很有意思。
统一到品牌色:用企业标志色去填模块,名片和宣传单页就有了整体感。可口可乐的红、星巴克的绿、Facebook 的蓝。带品牌色的二维码光看一眼就知道是哪家公司的。
营造季节感:圣诞卡用红与绿,万圣节用橙与黑,樱花季用粉与白。配合季节调整配色的二维码,能让收到的人眼前一亮(不过红配绿要留意对比度)。
改变模块的形状:把方形模块换成圆形,或者做成心形,这类设计二维码也很受欢迎。多亏了二维码的纠错功能,一定程度的变形是允许的。但变形过头就读不出来了,务必先测试再拿出去用。测试时至少换两三台不同的手机,并且在昏暗的光线下也扫一遍。