Matrix 首页推荐  

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。  

文章代表作者个人观点,少数派仅对标题和排版略作修改。


鉴于二维码类型众多,本文提到的二维码均为 QR Code。同时文中出现的部分二维码涉及隐私、广告等,经过处理无法识别均为正常,感谢理解。

当你扫码时,手机发生了什么

二维码的内容是一段文本,这些文本通过不同的前缀可以被手机识别为不同的数据类型。

以 iPhone 为例,使用自带的相机,或其它二维码识别 app 对二维码进行扫描的时候,会首先判断识别到的内容前缀,然后通过相应的 app 来打开该内容。如果是纯文本,则会使用 Safari 浏览器进行搜索。

而文本如果以 https:// 开头,就代表了该二维码是一个网址,在进行扫码的时候会自动通过 Safari 打开该链接。其它超链接诸如 mailto:xxx@qq.com(发邮件)tel:10010(打电话)smsto:10010(发短信),以及 URL Scheme 等这类第三方应用接口,也会让手机调用相关的 app 来执行。而通过 WIFI: 这个前缀还可以使用户直接扫码联网(对于可以共享 WiFi 密码的安卓手机,通常会生成一个二维码供其他手机扫描,而通过微信扫码后则可以看到其中的 WiFi 密码)。

但是多数情况下我们用来扫码的工具都是微信,而微信支持的只有文本与网页链接,且仅会调用微信内置的浏览器打开网址,这就大大限制了二维码的使用场景,本文也仅针对网址类的二维码进行简化的讨论。

什么决定了二维码的复杂度

影响二维码复杂度的两个属性分别是「内容长度」与「容错率」。

内容长度:顾名思义,二维码中所包含的文本长度决定了二维码画面的复杂度,文本越长二维码越复杂,反之则越简单。

相同的容错率下不同文本长度的二维码复杂程度

容错率:二维码的容错率设置为四个等级:L - 低容错率、M - 中等容错率、Q - 较高容错率、H - 高容错率,其中级别为 L 的容错率为 7%,M 容错率为 15%,Q 容错率为 25%,H 容错率为 30%,假如一个二维码在生成时设定容错率为 L 级别,那么生成的二维码被遮挡的内容超过 7% 就无法识别。而越是高容错的二维码看起来越是复杂,我们最常见的二维码多数采用了 M 等级的容错率,保证一定容错的情况下尽可能使二维码趋于简单。

同样内容不同容错等级的两个二维码

为何要简化二维码

美观:作为一名平面设计师,简单的二维码比起密密麻麻的复杂二维码看起来更为透气,也更容易与其它设计元素搭配。所以我在处理包含二维码的设计工作时,会尽量重制二维码让其变的更为简单美观。

提高识别度:前文提到说越是复杂的二维码容错越高,这里并非背道而驰。相较于高容错率,更简单的低容错二维码在线下介质的适应性上,要好于更复杂的二维码。有时候我们的二维码扫不出,不是因为二维码某个位置损毁脏污,而是因为部分介质较低的印刷精度,以及扫描距离的关系,导致低端的手机镜头整体无法识别。

二次创作:随着二维码逐渐被重视,一些专业的设计师,将二维码重新设计,使其看起来更具创意却依然能保证功能性。而这些再次创作的二维码越是简单,就越容易被重画。

图片来源于网络,二维码经过处理,不可扫描

如何让二维码变得更简单

并非所有的二维码都适合简单化,这要根据具体的场景来判断。也并非所有二维码都能够有效简化,这个要看内容。多数情况我们会用到的二维码内容通常就是以下两种:

  • 微信名片
  • 网页链接

对于微信名片,解析出的内容其实是以 https:// 开头的包含微信官方域名的链接,该链接只能被微信解析,且仅能通过扫码打开识别到(你发链接给别人是不支持打开的)。这类二维码只能通过降低容错率进行简化,但是因为微信名片的容错率已经是 M 级别,即使降低到 L 级别重新生成也对整体观感影响有限。

微信名片二维码简化后

而网页链接的简化方式有两种。第一种是去掉网址中冗余的参数后缀,比如像天猫的网址,去掉后缀并不影响准确访问,但是由于二维码复杂程度与内容长度息息相关,所以生成的二维码就可以大大简化。

网址1与网址2访问到的是同一个页面

另外一种方式则可以将二维码简化到极致,就是使用「短网址服务」。

将长网址缩为短网址,同样达到了缩减二维码文本长度的效果。但是该方法有两个弊端,第一是短网址是通过二次跳转的方式跳转到你的长(原)网址中,对于某些长网址来说,跳转后的访问可能会存在一些奇奇怪怪的问题:比如无法正确跳转,但多数情况是正常的;第二就是需要选择一些大厂的短网址服务,以避免微信等社交软件封禁短网址域名导致无法正确访问。如新浪 t.cn ,但由于现在 api 不对外,仅能通过发微博获取到。

内容缩短了之后,只需要选择一个顺手的二维码生成工具,生成 L 级别容错率的二维码,一个简化二维码的过程就算是结束了。而我通常会使用的是由 Python 编写的 Alfred 动作流插件,只需要一条指令就可以生成一个格式为 svg 的黑白矢量二维码,且每个小黑点都是独立分割的,方便后续的改色、大小的调整等,对该插件感兴趣的可以点此下载

快速生成矢量二维码的 Alfred 插件

最后

看似繁杂的二维码处理流程,在我的工作流中利用 Alfred 插件,从识别原码到重新生成的时间仅 10 秒左右。在实际工作中会经常遇到其他人提供的质量参差不齐的二维码(手机截图版的、彩色带装饰版的、分辨率不足版等),重新生成一次除了能够简化二维码之外,作为素材也能形成统一风格。

而绝大多数人是不需要如此处理二维码的,但是当你需要的时候,希望本文提供的思路与方法,可以为你的工作增添一个更多的选择。

感谢阅读,首次在少数派发文,如有不严谨的措辞希望各位派友多多包涵。

关联阅读

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰 

> 实用、好用的 正版软件,少数派为你呈现 🚀