二維碼原來可以這樣玩
二維碼是怎麼生成的?
二維碼其實就是由很多0、1組成的數字矩陣。二維碼是用某種特定的幾何圖形按一定規律在平面(二維方向上)分佈的黑白相間的圖形記錄資料符號資訊;它巧妙地利用構成計算機內部邏輯基礎的“0”、“1”位元流的概念,使用若干個與二進位制相對應的幾何形體來表示文字數值資訊,通過圖象輸入裝置或光電掃描裝置自動識讀以實現資訊自動處理。
下面我們來看一個簡單的二維碼樣例:
其實,二維碼就是把你想表達的資訊翻譯成黑白兩種小方塊,然後填到這個大方塊中。在定位準確的前提下,只要機器讀取到的那個部分有一個黑點——哪怕只是小小的黑點,都不妨礙它被識別為“1”,連一丁點兒小黑點都沒有的地方自然就被識別為“0”了,因此二維碼也未必都是由黑白小方塊組成。
缺了一塊也能掃?
二維碼的組成中含有很多糾錯碼,假如需要編碼的碼字資料有100個,並且想對其中的一半,也就是50個碼字進行糾錯,則計算方法如下。糾錯需要相當於碼字2倍的符號,因此在這種情況下的數量為50個×2=100碼字。因此,全部碼字數量為200個,其中用作糾錯的碼字為50個,也就是說在這個二維碼中,有25%的資訊是用來糾錯的,因此即使缺了一點或者變皺了也一樣能被識別,不信你試試。
這也就是為什麼現在許多二維碼中央都可以加上LOGO,比如算數學苑~
或者用其他東西代替LOGO也不要緊哦~
為什麼有三個大方塊?
這個我們就需要聊到二維碼是怎麼被手機識別的。
由於不同顏色的物體,其反射的可見光的波長不同,白色物體能反射各種波長的可見光,黑色物體則吸收各種波長的可見光.所以當攝像頭掃描黑白相間的二維碼上時,手機利用點運算的閾值理論將採集到的圖象變為二值影象,即對影象進行二值化處理,得到二值化影象後,對其進行膨脹運算,對膨脹後的圖象進行邊緣檢測得到條碼區域的輪廓。
然後經過一項灰度值計算公式對影象進行二值化處理。得到一幅標準的二值化影象後,對該符號進行網格取樣,對網格每一個交點上的影象畫素取樣,並根據閾值確定是深色“1”還是淺色“0”,從而得到二維碼的原始二進位制序列值,然後對這些資料進行糾錯和譯碼,最後根據條碼的邏輯編碼規則把這些原始的資料轉換成資料。
我們在使用手機掃描的時候無論是什麼方向,甚至歪歪扭扭,都能夠正確識別二維碼的內容,就是因為手機通過這三個黑色小方塊定位出二維碼正確的方向。所以這三個黑色小方塊千萬不能被擋住,當然倒也不一定非得是方塊形狀的啦…
試試掃一下!看到這相信大家對二維碼應該有所瞭解了吧,可能有人會說這些都太簡單了,網上有很多很有創意的二維碼呢,好吧,和小編一起來看看都是怎麼做的呢。
如下圖就是一個普通二維碼的基本結構。黑白元素其實就是二進位制,三個定位用圖案,以及中間的一些資訊儲存區。
來看一張我們設計師的傑作
說了那麼多,你還是發揮不出來這樣的藝術風格?好,那還是擼起袖子一起做吧。
我們來以一個較簡單的29x29的二維碼為例
❖ 首先給二維碼拉一個同樣大小的網格以區別二維碼中相鄰的畫素點,同樣,這裡二維碼中的黑色塊也已經預處理為圓形以示區分。
實際經驗表明在對二維碼中的黑色圓點進行藝術修改時,通常替代圖形最小不能上小於圖中的紅色圓點,最大也不能大於上圖中的黃色圓點,從而保證實際操作中二維碼的識別度不會下降甚至完全無法識別。
❖ 其次,根據擬採取的藝術主題,將不同的黑色圓點組合替換成相應的素材例項,下面以幾種水果給出這個過程的具象化表示。
左邊表示所替換的相鄰黑色圓點的數目,右邊表示擬替換的素材。
❖ 第三,將二維碼按照相鄰黑色圓點的數目、形狀以及藝術想法等,劃分為不同的區域,每一個區域都保證可以使用上述列表中的素材進行替代。如下圖所示。
❖ 最後,將擬定的素材替換到二維碼中規劃好的黃色區域。這一步需要邊替換邊檢查二維碼是否能夠被正常識別哦。
通過上述過程,就可以實現二維碼中黑色圓點的藝術化修改,打造一款自己需要主題的特色二維碼。看完整個過程,你是不是也心動了呢!
再|來|幾|張
看完這些,是不是覺得創意二維碼並沒有那麼難?是啊,有些事看起來很難,但是隻要你想嘗試,去動手,去思考,問題就會迎刃而解啦~
又是一年元旦到,祝各位粉絲擁有一個更加燦爛更加輝煌的2018!
演算法數學之美微信公眾號歡迎賜稿
稿件涉及數學、物理、演算法、計算機、程式設計等相關領域。
稿件一經採用,我們將奉上稿酬。
投稿郵箱:[email protected]