小程式碼 設計篇 菊花綻放

2022-08-24 19:21:09 字數 2070 閱讀 1217

初見小程式碼,猶如一朵盛開的菊花。

從設計的圖形上,我們把上述方案簡單分成:

• 平面類 如 qrcode ,snapchart code

• 環狀類 如 fb code,kik code,

考慮到專利風險,又要兼顧優雅美觀,我們最終選擇放射狀作為我們的 base 方案,也就是最後面世的「菊花碼」。

小程式的 3 個「牛眼」用來定位,放射線條編碼資訊,這是乙個大家都懂的原理。但」麻雀雖小,五臟俱全「,小程式碼與 qrcode 類似,同樣包含了定位區,編碼資訊區,元資訊區等部分,除此以外,我們還加入了自定義 logo 區,下面讓我們來解剖一下小程式碼。

」萬丈高樓平地起「,那小程式碼是如何一磚一瓦構建起來的呢?我們以乙個例項來演示小程式碼的生成 。

1 .定位點

定位點主要用於標記小程式碼的大小及在圖中的位置,與 qrcode 類似,我們採用了 3+1 的方案,3 個主定位點加乙個輔助定位點。可以發現,定位點的對角連線交點剛好是碼的圓心,3 個主定位點又剛好組成乙個等腰直角三角形。以上的特徵,非常有利於定位識別。

2 .資訊編碼區

我們會把原始編碼的字串,轉換成 01 的序列,再加入糾錯碼,得到最終 01 序列。我們只需要把 01 序列按一定的編碼路徑,填充到資訊編碼區的方格中即可(0 為白,1 為黑)。小程式在圖案編碼階段,也是按點編碼的的,並沒有線的概念。

3 .掩碼圖案

填充好編碼區之後,我們發現圖案與設計稿大相徑庭,並沒有發射狀線條的感覺。究其原因,是因為黑色點過於稀疏。所以我們還要做 mask,加上掩碼圖案。

mask 的原理其實就是拿乙個掩碼圖案與原圖做 xor 操作,在解碼階段,再做一次 xor 操作,兩次 xor 操作,我們得到了原始的資料區。

我們按照一定的規則,預先設定了 32 種 mask 模板。在碼生成階段,會尋找乙個最佳的 mask,讓我們的黑白分布更具線條感。mask 完成後,我們得到了下面的效果圖。

4 .元資訊區

前面我們提到,小程式碼分為多個版本,每個版本有 4 個糾錯 level,同時 mask 階段又有乙個獨特的 mask id。這些資訊,我們稱之為元資訊,需要獨立編碼到圖案中,並且本身具備糾錯能力。

至此,我們已經把所有必不可少的資訊寫入到圖案中,碼本身已經是可識別的了。為了讓整體更加美觀,需要對內外圈再進行一些處理。

5 .輪廓填充區

為了凸顯 logo 的形狀,我們在內圈留了一些區域作為輪廓填充區。

6 .邊緣補全區

最外圈也不帶有編碼資訊,用於勾勒圖案的輪廓,總體上我們有以下兩種方案

方案一更突出圖案更加圓的特點,但方案二可以讓線條顯得更加錯落有致,也是我們的最終選擇。

從小程式碼設計上,有以下幾個特點

最後我們再通過下圖,感受一下小程式碼這朵「菊花」綻放的過程。

小唐說設計模式 策略模式篇

當我們的 現了一連串的if else 或者是switch case 語句時,我們的 體就會很長很臃腫,閱讀性大大下降,此時可採用策略模式進行重構。策略模式利用的是物件導向語言的三個特性,尤其是繼承和多型。首先讓多個類繼承同乙個抽象的父類或者是實現乙個介面,在抽象類或者介面中宣告我們要實現的抽象方法,...

Cartographer原始碼篇 原始碼分析 1

在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...

寫程式碼小技巧!

相信會點進來的,都是想看看對你能有多少幫助吧?恭喜你被騙了 誤 其實做很多事情都一樣,有些人就是有天分,而大部分人則要靠後天。我也是後者,這邊提供幾個小技巧,提供各位參考。先思考程式架構,要怎麼完成,需要懂那些東西等等的。這個比較天馬行空,需要自己多思考 將要寫的功能做區塊化,簡單來說就是分成幾段程...