一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|

服務(wù)器之家 - 編程語言 - JAVA教程 - QR 二維碼中插入圖片實(shí)現(xiàn)方法

QR 二維碼中插入圖片實(shí)現(xiàn)方法

2020-07-02 11:56skyYangpan JAVA教程

這篇文章主要介紹了QR 二維碼中插入圖片實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下

QR 二維碼中插入圖片

二維碼終于火了,現(xiàn)在大街小巷大小商品廣告上的二維碼標(biāo)簽都隨處可見,而且大都不是簡(jiǎn)單的純二維碼,而是中間有個(gè)性圖標(biāo)的二維碼。

我之前做了一個(gè)使用google開源項(xiàng)目zxing實(shí)現(xiàn)二維碼、一維碼編碼解碼的程序并開放了源碼(用C#實(shí)現(xiàn)的條形碼和二維碼編碼解碼器),今天繼續(xù)在此程序基礎(chǔ)上,實(shí)現(xiàn)二維碼中間加小圖片。

背景知識(shí)

QRcode使用里德-所羅門碼來進(jìn)行錯(cuò)誤修正。對(duì)于我們來說,里德-所羅門編碼有兩個(gè)非常重要的特性。第一,它是一種顯式系統(tǒng)碼,也就是說,你可以在最終的編碼中直接看到原有的信息。就好比我們對(duì)”hello world”進(jìn)行編碼,最終看到的是”hello world”以及其后面跟隨的幾個(gè)容錯(cuò)碼。第二點(diǎn),里德-所羅門編碼是可以被”異或”的,將兩個(gè)不同里德-所羅門編碼得到的結(jié)果異或運(yùn)算后會(huì)得到一個(gè)新的里德-所羅門碼,并且這個(gè)新碼的原碼即是原來兩個(gè)原碼的異或。如果你想知道為什么這兩個(gè)特性會(huì)成立,請(qǐng)看Finite Field Arithmetic and Reed-Solomon Coding.

QRcode

一副QRcode圖像會(huì)定義一些獨(dú)特的描述符來幫助人們或者電腦識(shí)別出自己是一張QRcode。這種描述符隨著QRcode的大小不同而略有區(qū)別——越大的QRcode圖像擁有越多的描述符。但是對(duì)于人的識(shí)別來說,特征最明顯的還是圖片的四個(gè)角的符號(hào)是固定的,看到這樣的四個(gè)角人類就本能的反應(yīng):這是一個(gè)QRcode。

(實(shí)際上,我們可以通過讀取圖像最左上角的兩個(gè)象素點(diǎn)來判斷編碼的冗余程度。定義黑色為0,白色為1,那么如果看到00則是L級(jí)別的冗余,01是M,10是Q,11則是最高的H級(jí)別冗余。

有了上面的這些工作,我們可以非常容易的知道原碼信息在圖像中的位置。然后通過改變自己的原碼信息,就可以改變圖像中的像素以至于可以在里面作圖了。雖說如此,下面的一些情形可以讓事情變得更有趣。

我做的二維碼插入圖片:

之前我給大家免費(fèi)提供了使用zxing開源項(xiàng)目改造而成的一二維碼編碼解碼器,但未能插入圖片。這次經(jīng)過一番努力,成功將圖片插入二維碼,并能編碼和解碼。插入圖片的關(guān)鍵在于二維碼容錯(cuò)系數(shù)的調(diào)整,源碼中有詳盡描述。

界面:

QR 二維碼中插入圖片實(shí)現(xiàn)方法

QR 二維碼中插入圖片實(shí)現(xiàn)方法

要在二維碼中插入圖片且可以正常解碼,主要注意以下兩點(diǎn)即可:

1.設(shè)置二維碼的容錯(cuò)系數(shù)要高;

在Zxing項(xiàng)目中,二維碼生成的時(shí)候是可以設(shè)置容錯(cuò)系數(shù)的:

將EncodeHintType.ERROR_CORRECTION設(shè)置成ErrorCorrectionLevel.H

?
1
2
3
4
5
6
7
8
//構(gòu)造二維碼寫碼器
        MultiFormatWriter mutiWriter = new com.google.zxing.MultiFormatWriter();
        Hashtable hint=new Hashtable();
        hint.Add(EncodeHintType.CHARACTER_SET,"UTF-8");
        hint.Add(EncodeHintType.ERROR_CORRECTION,com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H);
        //生成二維碼
        ByteMatrix bm = mutiWriter.encode(txtMsg.Text, com.google.zxing.BarcodeFormat.QR_CODE, 300, 300,hint);
        Bitmap img = bm.ToBitmap();

2.中間插入的圖片大小和位置要合適;

QR 二維碼中插入圖片實(shí)現(xiàn)方法

中間圖片如果太大,遮住了二維碼的大部分面積,那肯定不行,如果太小,就起不到個(gè)性化的效果。

那么多大合適呢,根據(jù)前文中描述的QR碼的特點(diǎn),其三個(gè)帶方塊的角上是數(shù)據(jù)區(qū),不能覆蓋,只有中間和右下角這片區(qū)域可以覆蓋,但也不宜過大。

經(jīng)測(cè)試,中間小圖片尺寸占二維碼總寬度的2/7比較合適,既滿足了圖片的清晰度,又不影響二維碼的加密數(shù)據(jù)。

小圖片最好居中放置,而且形狀可以不規(guī)則。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美成人三级伦在线观看 | 青青青国产精品国产精品久久久久 | 国产成人久久精品区一区二区 | 午夜AV内射一区二区三区红桃视 | 亚洲AV无码偷拍在线观看 | а天堂中文最新版在线官网视频 | 免费观看在线观看 | 精品视频在线免费 | 女子监狱第二季未删减在线看 | 四虎免费影院在线播放 | 99久久精品免费精品国产 | 茄子香蕉视频 | 扒开大腿狠狠挺进视频 | 好姑娘完整版在线观看中文 | 亚洲AV永久无码精品澳门 | 91精品国产色综合久久 | 男人扒开女人下身添 | 大奶喷水 | 色先锋 影音先锋a 资源站 | 好吊色青青青国产综合在线观看 | 亚洲欧美日韩久久一区 | 惩罚美女妲己的尤老师 | 无限资源在线观看播放 | 天堂成人在线 | 饭冈加奈子在线播放观看 | 乳女教师欲乱动漫无修版动画3d | 国产在线视频欧美亚综合 | 美女被躁了在线观看视频 | 高清男的插曲女的 欢迎你老狼 | 日韩人成免费网站大片 | 色五月天天 | 免费观看国产大片资源视频 | 99视频在线看 | 91真人毛片一级在线播放 | 91久久夜色精品国产九色 | 91精品国产91久久 | 青草午夜精品视频在线观看 | 91视频完整版| 俄罗斯一级淫片 | 色婷婷在线视频 | 成全动漫视频在线观看 |