对比度
对比度(contrast)指相邻要素之间明暗或颜色差异的程度。对二维码而言,黑色模块(数据)与白色背景(留白)之间的对比度,是左右扫描精度的最关键因素之一。摄像头的解码器是按一个阈值来判断每个模块是明还是暗的,对比度不足时,模块的边界就无法被正确识别,整个码也就读不出来。
WCAG(网页内容无障碍指南)对文字与背景要求的 4.5:1,是给人眼读文字用的标准,和「扫得出来」属于另一个领域的另一套基准。二维码能不能读取,取决于相机的解码器能否按明暗差的阈值把每个模块二值化,因此实务上以模块与背景的对比度 4:1 以上作为下限的经验值;如果是印刷偏浅、逆光、低分辨率这些劣化会同时叠加的用途,余量做到 7:1 以上会更稳。对读取质量进行数值分级的是 ISO/IEC 15415 系列的验证标准(对符号对比度等进行等级评分),而作为符号规范的 ISO/IEC 18004 本身并未规定对比度的数值门槛。黑(#000000)与白(#FFFFFF)的组合对比度为 21:1,是最稳妥的选择。
为追求设计感而制作彩色二维码时,保证对比度就成了难点。基本原则是深色模块配浅色背景,常见的失败是用了明度过高的浅色模块,例如各种马卡龙色,看着好看但明度与白底几乎没有差别。另一个典型失败是在背景上铺照片或渐变,整体看似能分辨,局部却出现对比度不足的区域,扫描便在那里失败。此外还要注意方向不能颠倒:浅色模块配深色背景的反色码,有相当一部分解码器根本不受理。制作彩色二维码时,务必用多台不同型号的手机实际扫一遍,确认都能读取后再投入印刷。