QR 二維碼中插入圖片實現方法_java

來源:互聯網
上載者:User

QR 二維碼中插入圖片

二維碼終於火了,現在大街小巷大小商品廣告上的二維碼標籤都隨處可見,而且大都不是簡單的純二維碼,而是中間有個性表徵圖的二維碼。

我之前做了一個使用google開源項目zxing實現二維碼、一維碼編碼解碼的程式並開放了源碼(用C#實現的條碼和二維碼編碼解碼器),今天繼續在此程式基礎上,實現二維碼中間加小圖片。

背景知識

QRcode使用裡德-所羅門碼來進行錯誤修正。對於我們來說,裡德-所羅門編碼有兩個非常重要的特性。第一,它是一種顯式系統碼,也就是說,你可以在最終的編碼中直接看到原有的資訊。就好比我們對”hello world”進行編碼,最終看到的是”hello world”以及其後面跟隨的幾個容錯碼。第二點,裡德-所羅門編碼是可以被”異或”的,將兩個不同裡德-所羅門編碼得到的結果異或運算後會得到一個新的裡德-所羅門碼,並且這個新碼的原碼即是原來兩個原碼的異或。如果你想知道為什麼這兩個特性會成立,請看Finite Field Arithmetic and Reed-Solomon Coding.

QRcode

一副QRcode映像會定義一些獨特的描述符來協助人們或者電腦識別出自己是一張QRcode。這種描述符隨著QRcode的大小不同而略有區別——越大的QRcode映像擁有越多的描述符。但是對於人的識別來說,特徵最明顯的還是圖片的四個角的符號是固定的,看到這樣的四個角人類就本能的反應:這是一個QRcode。

(實際上,我們可以通過讀取映像最左上方的兩個象素點來判斷編碼的冗餘程度。定義黑色為0,白色為1,那麼如果看到00則是L層級的冗餘,01是M,10是Q,11則是最高的H層級冗餘。

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

我做的二維碼插入圖片:

之前我給大家免費提供了使用zxing開源項目改造而成的一二維碼編碼解碼器,但未能插入圖片。這次經過一番努力,成功將圖片插入二維碼,並能編碼和解碼。插入圖片的關鍵在於二維碼容錯係數的調整,源碼中有詳盡描述。

介面:

 

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

1.設定二維碼的容錯係數要高;

在Zxing項目中,二維碼產生的時候是可以設定容錯係數的:

將EncodeHintType.ERROR_CORRECTION設定成ErrorCorrectionLevel.H

//構造二維碼寫碼器        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碼的特點,其三個帶方塊的角上是資料區,不能覆蓋,只有中間和右下角這片地區可以覆蓋,但也不宜過大。

經測試,中間小圖片尺寸佔二維碼總寬度的2/7比較合適,既滿足了圖片的清晰度,又不影響二維碼的加密資料。

小圖片最好置中放置,而且形狀可以不規則。

感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.