生成二維碼的方法
【專利摘要】本發(fā)明屬于二維碼生成技術領域,尤其涉及一種生成二維碼的方法。本發(fā)明提出的生成二維碼的方法,包括二維碼矩陣生成步驟;矩陣點尺寸計算步驟;碼眼位置計算步驟;碼眼繪制步驟;矩陣點繪制步驟;圖像融合步驟;量化壓縮步驟。本發(fā)明提出的生成二維碼的方法采用透明色配色方案對碼眼進行美化、對矩陣點采用填充圖形,減少了冗余量和數據處理量,也實現了美化,并將背景圖案疊加在美化后的二維碼之上,使得美化后的二維碼與背景圖案相融合,從而提高用戶掃碼的積極性;同時,通過對二維碼矩陣點填充圖形的形狀、透明度及配色方案進行設計和搭配,極大的提高了美化后的二維碼的掃碼識別率。
【專利說明】
生成二維碼的方法
技術領域
[0001 ]本發(fā)明屬于二維碼生成技術領域,尤其涉及一種生成二維碼的方法。
【背景技術】
[0002]二維碼是一種存儲媒介,便于平面印刷和掃描,適合廣泛傳播;同時,二維碼必須依賴掃碼設備才能獲取其中的信息,也能夠一定程度上保護隱私,因此是一種非常有效的小容量存儲工具。
[0003]二維碼是一幅由許多點陣和點陣連接而成的連線組成的單一色調的正方形圖案。二維碼的左上角、左下角和右上角分別有一個明顯不同于其他區(qū)域的小方塊,這些小方塊分別為二維碼的左上碼眼、左下碼眼和右上碼眼。上述三個碼眼用于在掃碼時對二維碼進行定位,即為定位點。左上碼眼、左下碼眼和右上碼眼均由碼眼點組成,呈現為內框與外框嵌套的圖形,其中,碼眼點或者為黑色,或者為白色,二維碼規(guī)范對此有明確的規(guī)定。二維碼中包括糾錯碼。二維碼中除外左上碼眼、左下碼眼和右上碼眼之外的矩陣點區(qū)域用于記載該二維碼內攜帶的信息。
[0004]直觀上,人眼難以對二維碼中所攜帶的信息進行初步辨識,加之二維碼色調單一,因此,二維碼圖片與用戶的交互性差,用戶掃碼積極性不高。
[0005]現有技術中的確逐漸出現了一些二維碼的美化方法,但是這些美化的二維碼要么存在數據處理量大、冗余量高、處理過程復雜的技術問題,要么由于存在大量圖案和配色,十分不容易被掃描終端識別。
【發(fā)明內容】
[0006]鑒于此,本發(fā)明提出一種生成二維碼的方法。本發(fā)明提出的生成二維碼的方法對碼眼進行美化、對矩陣點采用填充圖形,減少了冗余量和數據處理量,也實現了美化,并將背景圖案疊加在美化后的二維碼之上,使得美化后的二維碼與背景圖案相融合,從而提高用戶掃碼的積極性;同時,通過對二維碼矩陣點填充圖形的形狀、透明度及配色方案進行設計和搭配,極大的提高了美化后的二維碼的掃碼識別率。
[0007]第一方面,本發(fā)明提出的生成二維碼的方法,包括如下步驟:
[0008]步驟1:獲取發(fā)布內容和發(fā)布者簽名信息,作為二維碼存儲信息;
[0009]步驟2:對存儲信息進行編碼,生成包含存儲信息編碼數據的信息碼元;
[0010]步驟3:根據該信息碼元生成二維碼圖片。
[0011 ]第二方面,本發(fā)明提出的生成二維碼的方法,包括如下步驟:
[0012](I) 二維碼矩陣生成步驟:
[0013]根據攜帶數據及生成條件,生成編碼后的二維碼矩陣;
[0014](2)矩陣點尺寸計算步驟:
[0015]根據獲取的背景圖案的尺寸和二維碼矩陣的矩陣點數,確定矩陣點尺寸;該矩陣點為正方形,該矩陣點尺寸是指該矩陣點邊長所包含的像素點數;
[0016](3)碼眼位置計算步驟:
[0017]計算左上碼眼、左下碼眼和右上碼眼的位置,以確定該二維碼矩陣中與該左上碼目艮、左下碼眼和右上碼眼對應的矩陣點的索引值;
[0018]確定該二維碼矩陣中與右下碼眼所對應的矩陣點的索引值,該右下碼眼是從該二維碼的糾錯碼中指定的;該右下碼眼的外框的邊長為5個矩陣點;該右下碼眼的內框的邊長為3個矩陣點;
[0019](4)碼眼繪制步驟
[0020]根據確定的該索引值,繪制該左上碼眼、該左下碼眼、該右上碼眼和該右下碼眼;
[0021]其中,該左上碼眼、左下碼眼、右上碼眼中的每個碼眼均采用下述步驟繪制:根據該索引值繪制邊長為7個矩陣點、透明度為80%的黑色的第一正方形;繪制邊長為5個矩陣點、透明度為80%的白色的第二正方形,該第二正方形與該第一正方形的中心重合;繪制邊長為3個矩陣點、透明度為80%的黑色的第三正方形,該第三正方形與該第一正方形、第二正方形的中心重合;包圍該第一正方形的矩陣點設置為80%透明度的白色;
[0022]其中,該右下碼眼采用下述步驟繪制:根據該索引值,繪制邊長為5個矩陣點、透明度為80%的黑色的第四正方形;繪制邊長為3個矩陣點、透明度為80%的白色的第五正方形,該第四正方形與該第五正方形的中心重合;將中心矩陣點繪制為透明度為80%的黑色;
[0023](5)矩陣點繪制步驟
[0024]根據該矩陣點尺寸,確定填充圖形,其中,
[0025]當該矩陣點尺寸大于等于24個像素點時,該填充圖形為漸變五角星形,該漸變五角星形的外切圓的半徑大于等于12個像素點;
[0026]當該矩陣點尺寸大于等于17個像素點且小于24個像素點時,該填充圖形為扁平化圓形,該扁平化圓形由一個底層第一正方形和一個上層圓形疊加而成,該底層第一正方形與該上層圓形的中心重合,該上層圓形的直徑大于等于17個像素點;
[0027]當該矩陣點尺寸大于等于7個像素點且小于17個像素點時,該填充圖形為漸變立體圓形,該漸變立體圓形的直徑大于等于7個像素點;
[0028]當該矩陣點尺寸大于等于4個像素點且小于7個像素點時,該填充圖形為正方形;該正方形由一個底層第二正方形和一個上層正方形疊加而成;該底層第二正方形和該上層正方形的中心重合,該上層正方形的邊長大于等于2個像素點;
[0029]對應地,
[0030]當該填充圖形為漸變五角星形且該矩陣點的值為I時,在該矩陣點處繪制從透明度為50%的黑色主色到透明色的漸變五角星形;當該填充圖形為漸變五角星形且當該矩陣點的值為O時,在該矩陣點處繪制從透明度為80%的白色主色到透明色的漸變五角星形;
[0031]當該填充圖形為扁平化圓形且該矩陣點的值為I時,在該矩陣點處繪制透明度為100%的黑色的該底層第一正方形,該底層第一正方形的邊長為該矩陣點尺寸;及繪制透明度為80%的黑色的該上層圓形;當該填充圖形為扁平化圓形且該矩陣點的值為O時,在該矩陣點處繪制透明度為50%的白色的該底層第一正方形,該底層第一正方形的邊長為該矩陣點尺寸;及繪制透明度為10%的白色的該上層圓形;
[0032]當該填充圖形為漸變立體圓形且該矩陣點的值為I時,在該矩陣點處繪制從透明度為50%的黑色主色到透明色的漸變立體圓形;當該填充圖形為漸變立體圓形且當該矩陣點的值為O時,在該矩陣點處繪制從透明度為80%的白色主色到透明色的漸變立體圓形;
[0033]當該填充圖形為正方形且當該矩陣點的值為I時,在該矩陣點處繪制透明度為90%的黑色的該底層第二正方形,該底層第二正方形的邊長為該矩陣點尺寸;及繪制透明度為20%的黑色的該上層正方形;當該填充圖形為正方形且當該矩陣點的值為O時,在該矩陣點處繪制透明度為70%的白色的該底層第二正方形,該底層第二正方形的邊長為該矩陣點尺寸;及繪制透明度為30 %的白色的該上層正方形;
[0034](6)圖像融合步驟
[0035]將步驟(5)獲得的二維碼圖片疊加到該背景圖案上;其中,
[0036]當該背景圖案為圖片時,將步驟(5)獲得的二維碼圖片以水印的方式嵌入到該背景圖案中;
[0037]當該背景圖案為動畫時,首先預加載動畫圖片,獲取該動畫所有的幀數,及為每一幅單幀畫面添加步驟(5)獲得的二維碼圖片的水印;
[0038](7)量化壓縮步驟
[0039]對步驟(6)中獲得的融合后的二維碼圖片進行量化,并對量化后的二維碼圖片進行壓縮編碼。
[0040]進一步地,本發(fā)明提出的生成二維碼的方法采用八叉樹算法進行量化。
[0041]進一步地,本發(fā)明提出的生成二維碼的方法中,該扁平化圓形的底層第一正方形的邊長與上層圓形的直徑的比例為2:1。
[0042]進一步地,本發(fā)明提出的生成二維碼的方法中,該正方形的底層第二正方形的邊長與上層正方形的邊長的比例為2:1。
[0043]進一步地,本發(fā)明提出的生成二維碼的方法中,該第一至第五正方形被美化為美化碼眼類型,該美化碼眼類為直角矩形、中心圓形、扇形、雙圓角、反向雙圓角、三圓角、圓弧形、菱形或圓角矩形。
[0044]進一步地,本發(fā)明提出的生成二維碼的方法中,繪制該漸變五角星形時,該五角星形坐標點計算步驟為:
[0045]I)計算該五角星形的外切圓半徑,該外切圓半徑大于等于12個像素點,且小于該矩陣點的尺寸的二分之一;
[0046]2)計算該外切圓的圓心的坐標;該圓心與該矩陣點的中心重合;;
[0047]3)計算該五角星形的五個頂點的坐標點和該五角星形的五個角所對應的弧度值;根據該弧度值的正弦值和余弦值,分別乘以該外切圓半徑,再結合該圓心的坐標,可得出該五角星形各點的坐標。
[0048]本發(fā)明提出的生成二維碼的方法采用透明色配色方案對碼眼進行美化及采用填充圖形對矩陣點進行填充,既減少了冗余量和數據處理量,也實現了美化;并將背景圖案疊加在美化后的二維碼之上,使得美化后的二維碼與背景圖案相融合,從而提高用戶掃碼的積極性;同時,通過對二維碼矩陣點填充圖形的形狀、透明度及配色方案進行設計和搭配,極大的提高了美化后的二維碼的掃碼識別率。
【附圖說明】
[0049]此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本發(fā)明的實施例,并與說明書一起用于解釋本發(fā)明的原理。
[0050]圖1為本發(fā)明實施例生成二維碼的方法的流程示意圖;
[0051 ]圖2為本發(fā)明實施例生成二維碼的方法的流程示意圖;
[0052]圖3為本發(fā)明實施例生成二維碼的方法中美化碼眼類型的示意圖;
[0053]圖4為本發(fā)明實施例漸變五角星形填充圖形的示意圖;
[0054]圖5為本發(fā)明實施例扁平化圓形填充圖形的示意圖;
[0055]圖6為本發(fā)明實施例漸變立體圓形填充圖形的示意圖;
[0056]圖7為本發(fā)明實施例正方形填充圖形的示意圖;
[0057]圖8為本發(fā)明實施例生成二維碼的方法中扁平化圓形填充后與背景圖案融合后的效果示意圖;
[0058]圖9為本發(fā)明實施例生成二維碼的方法中量化前后的二維碼效果示意圖。
【具體實施方式】
[0059]為使本申請的目的、技術方案和優(yōu)點更加清楚,下面將結合實施例中的附圖,對實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅是本申請一部分實施例,而不是全部實施例?;谝呀o出的實施例,本領域普通技術人員在未作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
[0060]實施例1
[0061]如圖1所示,本實施例生成二維碼的方法,包括如下步驟:
[0062]步驟SlOl:獲取發(fā)布內容和發(fā)布者簽名信息,作為二維碼存儲信息;
[0063]步驟S102:對存儲信息進行編碼,生成包含存儲信息編碼數據的信息碼元;
[0064]步驟S103:根據該信息碼元生成二維碼圖片。
[0065]實施例2
[0066]如圖2所示,本實施例生成二維碼的方法,包括如下步驟:
[0067]二維碼矩陣生成步驟S201:根據攜帶數據及生成條件,生成編碼后的二維碼矩陣;
[0068]矩陣點尺寸計算步驟S202:根據獲取的背景圖案的尺寸和二維碼矩陣的矩陣點數,確定矩陣點尺寸;
[0069]碼眼位置計算步驟S203:計算左上碼眼、左下碼眼和右上碼眼的位置,以確定該二維碼矩陣中與該左上碼眼、左下碼眼和右上碼眼對應的矩陣點的索引值;確定該二維碼矩陣中與右下碼眼所對應的矩陣點的索引值,該右下碼眼是從該二維碼的糾錯碼中指定的;該右下碼眼的外框的邊長為5個矩陣點;該右下碼眼的內框的邊長為3個矩陣點;
[0070]碼眼繪制步驟S204:根據確定的該索引值,繪制該左上碼眼、該左下碼眼、該右上碼眼和該右下碼眼;
[0071]其中,該左上碼眼、左下碼眼、右上碼眼中的每個碼眼均采用下述步驟繪制:根據該索引值繪制邊長為7個矩陣點、透明度為80%的黑色的第一正方形;繪制邊長為5個矩陣點、透明度為80%的白色的第二正方形,該第二正方形與該第一正方形的中心重合;繪制邊長為3個矩陣點、透明度為80%的黑色的第三正方形,該第三正方形與該第一正方形、第二正方形的中心重合;包圍該第一正方形的矩陣點設置為80%透明度的白色;
[0072]其中,該右下碼眼采用下述步驟繪制:根據該索引值,繪制外框為邊長為5個矩陣點、透明度為80 %的黑色的第四正方形;繪制邊長為3個矩陣點、透明度為80 %的白色的第五正方形,該第四正方形與該第五正方形的中心重合;將中心矩陣點繪制為透明度為80%的黑色;
[0073]矩陣點繪制步驟S205:根據該矩陣點尺寸,確定填充圖形,其中,當該矩陣點尺寸大于等于24個像素點時,該填充圖形為漸變五角星形,該漸變五角星形的外切圓的半徑大于等于12個像素點;當該矩陣點尺寸大于等于17個像素點且小于24個像素點時,該填充圖形為扁平化圓形,該扁平化圓形由一個底層第一正方形和一個上層圓形疊加而成,該底層第一正方形與該上層圓形的中心重合,該上層圓形的直徑大于等于17個像素點;當該矩陣點尺寸大于等于7個像素點且小于17個像素點時,該填充圖形為漸變立體圓形,該漸變立體圓形的直徑大于等于7個像素點;當該矩陣點尺寸大于等于4個像素點且小于7個像素點時,該填充圖形為正方形;該正方形由一個底層第二正方形和一個上層正方形疊加而成;該底層第二正方形和該上層正方形的中心重合,該上層正方形的邊長大于等于2個像素點;
[0074]對應地,當該填充圖形為漸變五角星形且該矩陣點的值為I時,在該矩陣點處繪制從透明度為50%的黑色主色到透明色的漸變五角星形;當該填充圖形為漸變五角星形且當該矩陣點的值為O時,在該矩陣點處繪制從透明度為80%的白色主色到透明色的漸變五角星形;
[0075]當該填充圖形為扁平化圓形且該矩陣點的值為I時,在該矩陣點處繪制透明度為100%的黑色的該底層第一正方形,該底層第一正方形的邊長為該矩陣點尺寸;及繪制透明度為80%的黑色的該上層圓形;當該填充圖形為扁平化圓形且該矩陣點的值為O時,在該矩陣點處繪制透明度為50%的白色的該底層第一正方形,該底層第一正方形的邊長為該矩陣點尺寸;及繪制透明度為10%的白色的該上層圓形;
[0076]當該填充圖形為漸變立體圓形且該矩陣點的值為I時,在該矩陣點處繪制從透明度為50%的黑色主色到透明色的漸變立體圓形;當該填充圖形為漸變立體圓形且當該矩陣點的值為O時,在該矩陣點處繪制從透明度為80%的白色主色到透明色的漸變立體圓形;
[0077]當該填充圖形為正方形且當該矩陣點的值為I時,在該矩陣點處繪制透明度為90%的黑色的該底層第二正方形,該底層第二正方形的邊長為該矩陣點尺寸;及繪制透明度為20%的黑色的該上層正方形;當該填充圖形為正方形且當該矩陣點的值為O時,在該矩陣點處繪制透明度為70%的白色的該底層第二正方形,該底層第二正方形的邊長為該矩陣點尺寸;及繪制透明度為30 %的白色的該上層正方形;
[0078]圖像融合步驟S206:將步驟(5)獲得的二維碼圖片疊加到該背景圖案上;其中,當該背景圖案為圖片時,將步驟(5)獲得的二維碼圖片以水印的方式嵌入到該背景圖案中;當該背景圖案為動畫時,首先預加載動畫圖片,獲取該動畫所有的幀數,及為每一幅單幀畫面添加步驟(5)獲得的二維碼圖片的水??;
[0079]量化壓縮步驟S207:對步驟(6)中獲得的融合后的二維碼圖片進行量化,并對量化后的二維碼圖片進行壓縮編碼。
[0080]具體應用時,本實施例生成二維碼的方法采用八叉樹算法進行量化。
[0081]具體應用時,本實施例生成二維碼的方法中,該扁平化圓形的底層第一正方形的邊長與上層圓形的直徑的比例為2:1;該正方形的底層第二正方形的邊長與上層正方形的邊長的比例為2:1。
[0082]具體應用時,本實施例生成二維碼的方法中,該第一至第五正方形被美化為美化碼眼類型,該美化碼眼類為直角矩形、中心圓形、扇形、雙圓角、反向雙圓角、圓弧形、菱形或圓角矩形。該直角矩形、中心圓形、扇形、雙圓角、反向雙圓角、三圓角、圓弧形、菱形或圓角矩形如圖3所示。
[0083]具體應用時,本實施例生成二維碼的方法中,繪制該漸變五角星形時,該五角星形坐標點計算步驟為:
[0084]I)計算該五角星形的外切圓半徑,該外切圓半徑大于等于12個像素點,且小于該矩陣點的尺寸的二分之一;
[0085]2)計算該外切圓的圓心的坐標;該圓心與該矩陣點的中心重合;;
[0086]3)遍歷該五角星形的五個頂點坐標點,分別計算出五個角所對應的弧度值,然后再根據該弧度值的正弦值和余弦值,分別乘以該外切圓半徑,再結合該圓心的坐標,可得出該五角星形各點的坐標。
[0087]本實施例生成二維碼的方法采用透明色配色方案對碼眼進行美化及采用填充圖形對矩陣點進行填充,既減少了冗余量和數據處理量,也實現了美化;并將背景圖案疊加在美化后的二維碼之上,使得美化后的二維碼與背景圖案相融合,從而提高用戶掃碼的積極性;同時,通過對二維碼矩陣點填充圖形的形狀、透明度及配色方案進行設計和搭配,極大的提高了美化后的二維碼的掃碼識別率。
[0088]如圖3至圖9所示,以下結合應用場景對本實施例生成二維碼的方法進行詳細說明。
[0089]首先,輸入需要二維碼攜帶的數據內容。二維碼可以攜帶各類數據內容,如視頻文件、圖片、動畫、付款信息、收款信息、語音和文字等。
[0090]進一步,根據攜帶數據及生成條件,生成編碼后的二維碼矩陣。具體地,根據該攜帶數據內容和設定的容錯率,確定二維碼版本號,并生成編碼后的二維碼矩陣;該二維碼矩陣的矩陣點的值為O或者I;該二維碼矩陣的矩陣點數記為mXm,該二維碼版本號記為V,有m= (V-1) X4+21。二維碼共有40個版本,S卩V的取值范圍為從I到40。需要說明的是,通常用m來表征二維碼矩陣的大小。
[0091]進一步,根據獲取的背景圖案的尺寸和二維碼矩陣的矩陣點數,確定矩陣點尺寸。其中,記背景圖案的尺寸為P,矩陣點尺寸為S,則有S = p/m。需要說明的是,P為背景圖案的單邊像素點數。
[0092]需要說明的是,這里“獲取的背景圖案”是指在一幅較大的背景圖案中預先指定的、需要與二維碼融合的區(qū)域所在的那部分背景圖案。
[0093]進一步,計算左上碼眼、左下碼眼和右上碼眼的位置,以確定該二維碼矩陣中與該左上碼眼、左下碼眼和右上碼眼對應的矩陣點的索引值;確定該二維碼矩陣中與右下碼眼所對應的矩陣點的索引值,該右下碼眼是從該二維碼的糾錯碼中指定的;該右下碼眼的外框的邊長為5個矩陣點;該右下碼眼的內框的邊長為3個矩陣點。
[0094]可以采用二維碼矩陣中矩陣點的索引值來表征碼眼的位置。根據二維碼生成規(guī)范,左上、左下、右上三個碼眼的外框的邊長優(yōu)選為7個矩陣點,因此可計算出左上、左下、右上碼眼的位置。采用上述優(yōu)選值時最有利于識別定位該二維碼。
[0095]另外,從二維碼校驗碼中選擇一個特定的正方形區(qū)域作為右下碼眼。由于二維碼校驗碼取決于二維碼版本號V,版本號不同,則校驗碼的顯示個數及位置也不相同。
[0096]本實施例生成二維碼的方法在確保碼眼能夠準確識別的前提下,在下述位置繪制該右下碼眼,從而使二維碼更加美觀。
[0097]記該右下碼眼對應的最左上矩陣點的列索引值為X,行索引值為y,則x= 4Xv+10,y = 4 X v+10;且該右下碼眼的外框的邊長為5個矩陣點;該右下碼眼的內框的邊長為3個矩陣點。
[0098]進一步,根據確定的該索引值,繪制該左上碼眼、該左下碼眼、該右上碼眼和該右下碼眼;其中,該左上碼眼、左下碼眼、右上碼眼中的每個碼眼均采用下述步驟繪制:根據該索引值繪制邊長為7個矩陣點、透明度為80%的黑色的第一正方形;繪制邊長為5個矩陣點、透明度為80%的白色的第二正方形,該第二正方形與該第一正方形的中心重合;繪制邊長為3個矩陣點、透明度為80%的黑色的第三正方形,該第三正方形與該第一正方形、第二正方形的中心重合;包圍該第一正方形的矩陣點設置為80%透明度的白色;
[0099]其中,該右下碼眼采用下述步驟繪制:根據該索引值,繪制邊長為5個矩陣點、透明度為80%的黑色的第四正方形;繪制邊長為3個矩陣點、透明度為80%的白色的第五正方形,該第四正方形與該第五正方形的中心重合;將中心矩陣點繪制為透明度為80%的黑色。
[0100]優(yōu)選地,該第一至第五正方形被美化為如圖3所示的直角矩形、中心圓形、扇形、雙圓角、反向雙圓角、三圓角、圓弧形、菱形或圓角矩形等美化碼眼類型。
[0101]對于不同的美化碼眼類型,按照以下步驟繪制左上、左下、右上三個碼眼:
[0102]根據該索引值繪制邊長為7個矩陣點、透明度為80%的黑色的第一正方形;繪制邊長為5個矩陣點、透明度為80%的白色的第二正方形,該第二正方形與該第一正方形的中心重合;繪制邊長為3個矩陣點、透明度為80%的黑色的第三正方形,該第三正方形與該第一正方形、第二正方形的中心重合;包圍該第一正方形的矩陣點設置為80%透明度的白色;
[0103]對于不同的美化碼眼類型,按照以下步驟繪制該右下碼眼:根據該索引值,繪制邊長為5個矩陣點、透明度為80%的黑色的第四正方形;繪制邊長為3個矩陣點、透明度為80%的白色的第五正方形,該第四正方形與該第五正方形的中心重合;將中心矩陣點繪制為透明度為80%的黑色。
[0104]因為碼眼的作用是在掃描識別時用于定位,因此上述特定的碼眼繪制方法相比于現有技術能夠保證在掃碼時容易識別;更別致的碼眼圖案既美化了碼眼,也能與任何靜態(tài)圖片或動畫等背景圖案相融合。
[0105]進一步,根據該矩陣點尺寸,確定與該矩陣點尺寸相對應的填充圖形填充各矩陣點,以得到矩陣點美化后的二維碼。
[0106]為了使生成的二維碼既美觀又容易被掃描終端識別,填充圖形可采用多種形式,如正方形、漸變立體圓形,扁平化圓形、多邊形等。具體的填充圖形根據二維碼矩陣點的尺寸進行選擇。
[0107]具體地,根據矩陣點的尺寸設定如下規(guī)則:矩陣點的尺寸大于24個像素點時采用多邊形;矩陣點的尺寸大于17個像素點時采用扁平化圓形;矩陣點的尺寸大于7個像素點時采用漸變立體圓形;矩陣點的尺寸小于或等于4個像素點時采用正方形。優(yōu)選地,多邊形為漸變五角星形。具體應用時,根據矩陣點的尺寸按照由大到小的順序依次匹配,即可確定相對應的填充圖形。
[0108]另外,填充圖形不同時,所采用的透明度和搭配方案也不相同。
[0109]具體地,每個矩陣點的主色由該矩陣點的值來確定:矩陣點的值為I時,該矩陣點的主色為黑色;矩陣點的值為O時,該矩陣點的主色為白色。
[0110]各填充圖形的配色方案及繪制方法如下:
[0111](I):漸變五角星形。首先計算出五角星形各點的坐標,然后由主色(黑色或白色)到透明色漸變繪制圖形。該五角星形的配色方案為黑色主色為50%透明度,白色主色為80%透明度。圖4示出的是主色為白色時的漸變五角星形填充圖形。
[0112]具體地,繪制漸變五角星形時,五角星形坐標點計算步驟為:
[0113]I)計算該五角星形的外切圓半徑,該外切圓半徑大于等于12個像素點,且小于m/2;
[om] 2)計算該外切圓圓心的坐標,該圓心的列索引值為x0=m-m/2;行索引值為yO=m-m/2;
[0115]3)計算該五角星形的五個頂點的坐標點和該五角星形的五個角所對應的弧度值;根據該弧度值的正弦值和余弦值,分別乘以該外切圓半徑,再結合該圓心的坐標,可得出該五角星形各點的坐標。
[0116](2):扁平化圓形。扁平化圓形采用兩層圖形疊加而成,底層圖形采用正方形,上層圖形采用圓形。該扁平化圓形的配色方案為:底層圖形的黑色主色為100%的透明度,白色主色為50%的透明度;上層圖形的黑色主色為80%的透明度,白色主色為10%的透明度。圖5示出的是主色為白色時的扁平化圓形填充圖形。
[0117](3)漸變立體圓形。根據直徑和圓心,確定該漸變立體圓形的坐標,然后由主色(黑色或白色)到透明色漸變繪制該圓形。該漸變立體圓形的配色方案為黑色主色為50%透明度,白色主色為80%透明度。圖6中示出的是主色為白色時的漸變立體圓形填充圖形。
[0118](4)正方形。正方形采用兩層圖形疊加而成,底層圖形采用較大的正方形,上層圖形采用較小的正方形。該正方形的配色方案為:底部正方形的配色為黑色主色為90%透明,白色主色為70%透明,上層正方形的配色為黑色主色為20%透明,白色主色為30%透明。圖7示出的是主色為白色時的正方形填充圖形。
[0119]采用以上配色方案,采用對應的填充圖形,填充各矩陣點,從而得到美化后的二維碼。
[0120]以上填充矩陣點的步驟,相對于現有技術而言,能夠減少傳統(tǒng)二維碼里矩陣點中50%以上的色塊,既減少了冗余量和數據處理量,也實現了矩陣點區(qū)域的美化;另外,通過對二維碼矩陣點填充圖形的形狀、透明度及配色方案進行設計和搭配,極大的提高了美化后的二維碼的掃碼識別率;另外,上述透明度的選擇在提高掃碼識別率的同時也更有利于在后續(xù)圖像融合步驟中與獲得更好的融合效果。
[0121]優(yōu)選地,該正方形的底層正方形的邊長與上層正方形的邊長的比例為2:1。經過結合不同的待融合的背景圖案,經過反復試驗,該正方形的底層正方形的邊長與上層正方形的邊長的比例為2:1時,融合后的二維碼的掃碼準確率最高。
[0122]優(yōu)選地,該扁平化圓形的底層正方形的邊長與上層圓形的直徑的比例為2:1。經過結合不同的待融合的背景圖案,經過反復試驗,該扁平化圓形的底層正方形的邊長與上層圓形的直徑的比例為2:1時,融合后的二維碼的掃碼準確率最高。
[0123]進一步地,將美化后的二維碼圖片與背景圖案進行融合。將二維碼圖片與背景圖案融合時,對靜態(tài)圖片和動態(tài)圖片采用不同的處理方式。靜態(tài)圖片可以包括jpg,jpeg,webp,png,bmp等格式。動態(tài)圖片可以包括gif等格式。對于靜態(tài)圖片,將將二維碼圖片以水印的方式嵌入到背景圖片中。為達到更佳效果,在嵌入時設置高質量融合,提高清晰度以便更好的識別。對于動態(tài)圖片,首先預加載動畫圖片,獲取該動畫所以的幀數,為每一幅單幀畫面添加二維碼水印,并加以量化處理以達到更佳效果,最終將融合后的圖片以gif格式存儲。
[0124]融合后的二維碼圖片如圖8所示,美化后的二維碼與背景圖案相融合,可以有效提高用戶掃碼的積極性。
[0125]進一步地,對融合后的二維碼圖片進行量化壓縮處理。具體地,對融合后的二維碼圖片進行量化處理,使二維碼區(qū)域的圖像更佳細膩,更容易識別。圖9左側示出了量化之前的美化二維碼圖片,圖9右側示出了量化之后的美化二維碼圖片,經過對比,量化后的二維碼圖片更加細膩,更加容易識別。
[0126]另外,量化后得到的二維碼圖片的數據量十分巨大,必須采用編碼技術來壓縮其信息量,在滿足一定保真度的要求下,對二維碼圖片進行變換、編碼和壓縮,去除多余數據減少表示二維碼圖片時需要的數據量,以便于二維碼圖片的存儲和傳輸。即以較少的數據量無損地表示原來的像素矩陣。常見的圖片壓縮方法有mpeg、dpeg、jepg等。
[0127]優(yōu)化地,該量化采用八叉樹顏色量化算法,該算法實現如下:
[0128]八叉樹算法用于產生最適合一幅圖像的256色調色板。八叉樹顏色量化可分為建立色彩八叉樹、產生調色板、生成量化文件3個步驟。順序讀入像素顏色(R,G,B),建立一棵葉節(jié)點小于256(即量化后顏色數)的色彩八叉樹。然后對色彩八叉樹進行遍歷,對256個葉子節(jié)點計算出代表顏色并進行編號得到調色板。最后再次掃描文件,將每一顏色映射到調色板上,產生量化后的新圖像。
[0129]建立色彩八叉樹過程中涉及到顏色的查找、插入和節(jié)點歸并3種操作。掃描圖像,對每一個像素顏色值(R,G,B)計算路徑索引值在色彩八叉樹進行查找,按查找結果進行插入操作:
[0130](I)到了第η層未查到,說明是新的顏色,插入此新的葉節(jié)點Count = I,redsum = R,greensum=G,bluesum = B, isLeaf (是否葉節(jié)點)=true,葉節(jié)點加數I。
[0131 ] (2)找到是已有的顏色:count++,redsum+ = R,greensum+=G,bluesum+ = B0
[0132](3)走到葉子節(jié)點,但層數小于n,說明是歸并過的節(jié)點,操作同(2)。
[0133]為了便于歸并的操作,按層建立了可歸并節(jié)點鏈,鏈中節(jié)點按頻度遞減順序排列,在第(2)步、第(3)步兩步中節(jié)點頻度發(fā)生改變,要對其在歸并鏈中的順序進行修改。
[0134]當葉節(jié)點數大于256時,對色彩八叉樹進行歸并。首先選擇深度最大的子樹進行歸并,相同深度的子樹頻度最小優(yōu)先。將該歸并節(jié)點的所有子節(jié)點的count,red sum,greensum,bluesum值進行累加和分別賦給該節(jié)點對應的變量,isLeaf值設為true,從可歸并節(jié)點鏈中刪除該節(jié)點。
[0135]對建立好的色彩八叉樹進行遍歷,當遇到葉節(jié)點時計算該葉節(jié)點的代表顏色(redsum/count, greensum/count,bluesum/count),將該顏色加入調色板,并在葉節(jié)點中記錄該顏色在調色板中的索引值。
[0136]重新掃描圖像,由圖像每個像素的顏色值得出的路徑查找到色彩八叉樹中的對應的葉子節(jié)點,用葉節(jié)點中記錄的調色板的代表色填充。而頻度高的結點未被歸并,則用最接近的色彩填充,最終產生量化后的新圖像。
[0137]以上已經描述了本發(fā)明的各實施例,上述說明是示例性的,并非窮盡性的,并且也不限于所披露的各實施例。在不偏離所說明的各實施例的范圍和精神的情況下,對于本技術領域的普通技術人員來說許多修改和變更都是顯而易見的。本文中所用術語的選擇,旨在最好地解釋各實施例的原理、實際應用或對市場中的技術的改進,或者使本技術領域的其它普通技術人員能理解本文披露的各實施例。本領域技術人員在考慮說明書及實踐這里公開的公開后,將容易想到本公開的其它實施方案。本申請旨在涵蓋本公開的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本公開的一般性原理并包括本公開未公開的本技術領域中的公知常識或慣用技術手段。
【主權項】
1.一種生成二維碼的方法,其特征在于,包括如下步驟: 步驟1:獲取發(fā)布內容和發(fā)布者簽名信息,作為二維碼存儲信息; 步驟2:對存儲信息進行編碼,生成包含存儲信息編碼數據的信息碼元; 步驟3:根據所述信息碼元生成二維碼圖片。2.一種生成二維碼的方法,其特征在于,包括如下步驟: (1)二維碼矩陣生成步驟: 根據攜帶數據及生成條件,生成編碼后的二維碼矩陣; (2)矩陣點尺寸計算步驟: 根據獲取的背景圖案的尺寸和二維碼矩陣的矩陣點數,確定矩陣點尺寸;所述矩陣點為正方形,所述矩陣點尺寸是指所述矩陣點邊長所包含的像素點數; (3)碼眼位置計算步驟: 計算左上碼眼、左下碼眼和右上碼眼的位置,以確定所述二維碼矩陣中與所述左上碼目艮、左下碼眼和右上碼眼對應的矩陣點的索引值; 確定所述二維碼矩陣中與右下碼眼所對應的矩陣點的索引值,所述右下碼眼是從所述二維碼的糾錯碼中指定的;所述右下碼眼的外框的邊長為5個矩陣點;所述右下碼眼的內框的邊長為3個矩陣點; (4)碼眼繪制步驟 根據確定的所述索引值,繪制所述左上碼眼、所述左下碼眼、所述右上碼眼和所述右下碼眼; 其中,所述左上碼眼、左下碼眼、右上碼眼中的每個碼眼均采用下述步驟繪制:根據所述索引值繪制邊長為7個矩陣點、透明度為80%的黑色的第一正方形;繪制邊長為5個矩陣點、透明度為80%的白色的第二正方形,所述第二正方形與所述第一正方形的中心重合;繪制邊長為3個矩陣點、透明度為80%的黑色的第三正方形,所述第三正方形與所述第一正方形、第二正方形的中心重合;包圍所述第一正方形的矩陣點設置為80%透明度的白色; 其中,所述右下碼眼采用下述步驟繪制:根據所述索引值,繪制邊長為5個矩陣點、透明度為80%的黑色的第四正方形;繪制邊長為3個矩陣點、透明度為80%的白色的第五正方形,所述第四正方形與所述第五正方形的中心重合;將中心矩陣點繪制為透明度為80%的黑色; (5)矩陣點繪制步驟 根據所述矩陣點尺寸,確定填充圖形;其中, 當所述矩陣點尺寸大于等于24個像素點時,所述填充圖形為漸變五角星形,所述漸變五角星形的外切圓的半徑大于等于12個像素點; 當所述矩陣點尺寸大于等于17個像素點且小于24個像素點時,所述填充圖形為扁平化圓形,所述扁平化圓形由一個底層第一正方形和一個上層圓形疊加而成,所述底層第一正方形與所述上層圓形的中心重合,所述上層圓形的直徑大于等于17個像素點; 當所述矩陣點尺寸大于等于7個像素點且小于17個像素點時,所述填充圖形為漸變立體圓形,所述漸變立體圓形的直徑大于等于7個像素點; 當所述矩陣點尺寸大于等于4個像素點且小于7個像素點時,所述填充圖形為正方形;所述正方形由一個底層第二正方形和一個上層正方形疊加而成;所述底層第二正方形和所述上層正方形的中心重合,所述上層正方形的邊長大于等于2個像素點; 對應地, 當所述填充圖形為漸變五角星形且所述矩陣點的值為I時,在所述矩陣點處繪制從透明度為50%的黑色主色到透明色的漸變五角星形;當所述填充圖形為漸變五角星形且當所述矩陣點的值為O時,在所述矩陣點處繪制從透明度為80 %的白色主色到透明色的漸變五角星形; 當所述填充圖形為扁平化圓形且所述矩陣點的值為I時,在所述矩陣點處繪制透明度為O的黑色的所述底層第一正方形,所述底層第一正方形的邊長為所述矩陣點尺寸;及繪制透明度為80%的白色的所述上層圓形;當所述填充圖形為扁平化圓形且所述矩陣點的值為O時,在所述矩陣點處繪制透明度為50 %的白色的所述底層第一正方形,所述底層第一正方形的邊長為所述矩陣點尺寸,及繪制透明度為10%的白色的所述上層圓形; 當所述填充圖形為漸變立體圓形且所述矩陣點的值為I時,在所述矩陣點處繪制從透明度為50%的黑色主色到透明色的漸變立體圓形;當所述填充圖形為漸變立體圓形且當所述矩陣點的值為O時,在所述矩陣點處繪制從透明度為80%的白色主色到透明色的漸變立體圓形; 當所述填充圖形為正方形且當所述矩陣點的值為I時,在所述矩陣點處繪制透明度為90%的黑色的所述底層第二正方形,所述底層第二正方形的邊長為所述矩陣點尺寸;及繪制透明度為20%的黑色的所述上層正方形;當所述填充圖形為正方形且當所述矩陣點的值為O時,在所述矩陣點處繪制透明度為70%的白色的所述底層第二正方形,所述底層第二正方形的邊長為所述矩陣點尺寸;及繪制透明度為30%的白色的所述上層正方形; (6)圖像融合步驟 將步驟(5)獲得的二維碼圖片疊加到所述背景圖案上;其中, 當所述背景圖案為圖片時,將步驟(5)獲得的二維碼圖片以水印的方式嵌入到所述背景圖案中; 當所述背景圖案為動畫時,首先預加載動畫圖片,獲取所述動畫所有的幀數,及為每一幅單幀畫面添加步驟(5)獲得的二維碼圖片的水印,從而獲得融合后的二維碼圖片; (7)量化壓縮步驟 對步驟(6)中獲得的融合后的二維碼圖片進行量化,并對量化后的二維碼圖片進行壓縮編碼。3.根據權利要求2所述的生成二維碼的方法,其特征在于,采用八叉樹算法進行量化。4.根據權利要求2所述的生成二維碼的方法,其特征在于,所述扁平化圓形的底層第一正方形的邊長與上層圓形的直徑的比例為2:1。5.根據權利要求2所述的生成二維碼的方法,其特征在于,所述正方形的底層第二正方形的邊長與上層正方形的邊長的比例為2:1。6.根據權利要求2所述的生成二維碼的方法,其特征在于,所述第一至第五正方形被美化為美化碼眼類型,所述美化碼眼類為直角矩形、中心圓形、扇形、雙圓角、反向雙圓角、三圓角、圓弧形、菱形或圓角矩形。7.根據權利要求2所述的生成二維碼的方法,其特征在于,繪制所述漸變五角星形時,所述五角星形坐標點計算步驟為: 1)計算所述五角星形的外切圓半徑,所述外切圓半徑大于等于12個像素點,且小于所述矩陣點的尺寸的二分之一; 2)計算所述外切圓的圓心的坐標;所述圓心與所述矩陣點的中心重合; 3)計算所述五角星形的五個頂點的坐標點和所述五角星形的五個角所對應的弧度值;根據所述弧度值的正弦值和余弦值,分別乘以所述外切圓半徑,再結合所述圓心的坐標,可得出所述五角星形各點的坐標。
【文檔編號】G06K19/06GK105930891SQ201610240947
【公開日】2016年9月7日
【申請日】2016年4月18日
【發(fā)明人】閆河
【申請人】閆河