一日一技 | 從原理出發,聊聊如何簡化二維碼
Matrix 首頁推薦
Matrix是少數派的寫作社區,我們主張分享真實的產品體驗,有實用價值的經驗與思考。我們會不定期挑選 Matrix 最優質的文章,展示來自用户的最真實的體驗和觀點。
文章代表作者個人觀點,少數派僅對標題和排版略作修改。
鑑於二維碼類型眾多,本文提到的二維碼均為 QR Code。同時文中出現的部分二維碼涉及隱私、廣吿等,經過處理無法識別均為正常,感謝理解。
當你掃碼時,手機發生了什麼
二維碼的內容是一段文本,這些文本通過不同的前綴可以被手機識別為不同的數據類型。
以 iPhone 為例,使用自帶的相機,或其它二維碼識別 app 對二維碼進行掃描的時候,會首先判斷識別到的內容前綴,然後通過相應的 app 來打開該內容。如果是純文本,則會使用 Safari 瀏覽器進行搜索。
而文本如果以 http://
開頭,就代表了該二維碼是一個網址,在進行掃碼的時候會自動通過 Safari 打開該鏈接。其它超鏈接諸如 mailto:[email protected](發郵件)
、 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 等級的容錯率,保證一定容錯的情況下儘可能使二維碼趨於簡單。
為何要簡化二維碼
美觀:作為一名平面設計師,簡單的二維碼比起密密麻麻的複雜二維碼看起來更為透氣,也更容易與其它設計元素搭配。所以我在處理包含二維碼的設計工作時,會盡量重製二維碼讓其變的更為簡單美觀。
提高識別度:前文提到説越是複雜的二維碼容錯越高,這裏並非背道而馳。相較於高容錯率,更簡單的低容錯二維碼在線下介質的適應性上,要好於更復雜的二維碼。有時候我們的二維碼掃不出,不是因為二維碼某個位置損毀髒污,而是因為部分介質較低的印刷精度,以及掃描距離的關係,導致低端的手機鏡頭整體無法識別。
二次創作:隨着二維碼逐漸被重視,一些專業的設計師,將二維碼重新設計,使其看起來更具創意卻依然能保證功能性。而這些再次創作的二維碼越是簡單,就越容易被重畫。
如何讓二維碼變得更簡單
並非所有的二維碼都適合簡單化,這要根據具體的場景來判斷。也並非所有二維碼都能夠有效簡化,這個要看內容。多數情況我們會用到的二維碼內容通常就是以下兩種:
- 微信名片
- 網頁鏈接
對於微信名片,解析出的內容其實是以 http://
開頭的包含微信官方域名的鏈接,該鏈接只能被微信解析,且僅能通過掃碼打開識別到(你發鏈接給別人是不支持打開的)。這類二維碼只能通過降低容錯率進行簡化,但是因為微信名片的容錯率已經是 M 級別,即使降低到 L 級別重新生成也對整體觀感影響有限。
而網頁鏈接的簡化方式有兩種。第一種是去掉網址中宂餘的參數後綴,比如像天貓的網址,去掉後綴並不影響準確訪問,但是由於二維碼複雜程度與內容長度息息相關,所以生成的二維碼就可以大大簡化。
另外一種方式則可以將二維碼簡化到極致,就是使用「短網址服務」。
將長網址縮為短網址,同樣達到了縮減二維碼文本長度的效果。但是該方法有兩個弊端,第一是短網址是通過二次跳轉的方式跳轉到你的長(原)網址中,對於某些長網址來説,跳轉後的訪問可能會存在一些奇奇怪怪的問題:比如無法正確跳轉,但多數情況是正常的;第二就是需要選擇一些大廠的短網址服務,以避免微信等社交軟件封禁短網址域名導致無法正確訪問。如新浪 t.cn ,但由於現在 api 不對外,僅能通過發微博獲取到。
內容縮短了之後,只需要選擇一個順手的二維碼生成工具,生成 L 級別容錯率的二維碼,一個簡化二維碼的過程就算是結束了。而我通常會使用的是由 Python 編寫的 Alfred 動作流插件,只需要一條指令就可以生成一個格式為 svg
的黑白矢量二維碼,且每個小黑點都是獨立分割的,方便後續的改色、大小的調整等,對該插件感興趣的可以 點此下載 。
最後
看似繁雜的二維碼處理流程,在我的工作流中利用 Alfred 插件,從識別原碼到重新生成的時間僅 10 秒左右。在實際工作中會經常遇到其他人提供的質量參差不齊的二維碼(手機截圖版的、彩色帶裝飾版的、分辨率不足版等),重新生成一次除了能夠簡化二維碼之外,作為素材也能形成統一風格。
而絕大多數人是不需要如此處理二維碼的,但是當你需要的時候,希望本文提供的思路與方法,可以為你的工作增添一個更多的選擇。
感謝閲讀,首次在少數派發文,如有不嚴謹的措辭希望各位派友多多包涵。
關聯閲讀
> 下載少數派 2.0 客户端、關注 少數派公眾號,解鎖全新閲讀體驗 :newspaper:
> 實用、好用的正版軟件,少數派為你呈現 :rocket:
- Apple 與「聚光燈」下的開發者們:App Store 交出階段性成績單
- 無需 Root,一鍵分辨手機自帶系統應用用途或卸載:Universal Android Debloater
- 從盲目崇拜到理性使用,談談我眼中的「雙向鏈接」
- Figma 的核心概念:Frame
- 消費者的高端夢先碎:作為米粉我究竟期待過什麼?
- 一日一技 | 我開發的這款小工具,輕鬆助你將飛書文檔轉為 Markdown
- 閉關家中,我將監控攝像對準了自己
- #熱門話題的兩端藏着一段歷史#
- 派評 | 近期值得關注的 App
- 站在用户的角度,聊聊「旗艦芯片」給我們帶來的體驗改變
- 我是如何將舊設備的 Micro-USB 改為 Type-C 充電口的
- 科普 | 下載應用這件事,Play 商店為什麼比國內軟件商店更好?
- 一日一技 | 從原理出發,聊聊如何簡化二維碼
- 怎樣一鍵並列顯示雙語網頁
- 咖啡地圖 | 哥倫比亞的咖啡與宗教
- 譯文 | 無障礙字體指南:如何讓字體更為友好
- 新玩意 106|少數派的作者們最近買了啥?
- 舊酒換新杯,Linux 遊戲的春天
- App 1 | 國產小組件庫,為筆記嵌入可視化模塊:NotionPet
- 兩個月的居家隔離,我收穫了什麼