http://frankman.blog.163.com/blog/static/3780069920113169555147/
要使用二維條碼來存放更多的可壓縮資訊,本著前人栽樹後人乘涼的原則,選擇從網上下載開源的工具進行再利用。因此選擇了日本人開發的一套二維條碼實現,網上也提供了很多的例子,不過很多jar包都是只包含解析二維碼的功能,而不包含產生二維碼的功能。
JavaEye上面倒是有一個整合了的jar包,不過已經忘記出自那個文章,這裡我就提供一個整合的jar包下載,借花獻佛了。嘿嘿http://www.yimuhe.com/filedown.php?id=167916
網上的例子都比較好,不過就是沒有比較詳細講解關於QRCode二維碼產生的規則和要點。例如:為什麼要在產生二維碼的時候,判斷字元集的長度要小於128。要知道二維碼資訊容量大:可容納多達1850個大寫字母或2710個數字或1108個位元組,或500多個漢字,比普通條碼資訊容量約高几十倍。如果控制壓縮內容在128個以內的話,那麼二維碼的優勢哪裡去了?
經過多次測試發現,二維碼所能包含的字元資訊量是由QrcodeVersion的設定值來決定的。將QrcodeVersion設定到20的時候,就已經可以容乃到300多個位元組。
如果你以為這樣就解決了問題的話,那麼就錯了,嘿嘿。如果只是修改了QrcodeVersion的值,解決的僅僅是字元集容量的問題,可是這樣產生的圖片無法解碼。可是把字元容量控制在128個以內的時候,就可以正常的解碼。難道日本人寫的東西會有這麼多的問題,網上搜來搜去,只能找到幾個難兄難弟,但是沒有找到解決的方法。
無意中開啟產生的圖片一看才發現了問題,產生的二維碼圖片的大小是會根據所壓縮的資訊內容而變化的,網上提供的例子是通過new BufferedImage(139, 139, BufferedImage.TYPE_INT_RGB);來建立映像對象的,預設的情況片的大小是139*139,這個大小是比較適合QrcodeVersion為7的情況。將圖片的大小設定到300*300就可以很好的支援QrcodeVersion為20的情況,並且可以正常的解碼。
QrcodeVersion的範圍值是0-40,0的含義是表示壓縮的資訊量將會根據實際傳入值確定,只有最高上限的控制,而且圖片的大小將會根據資訊量自動縮放。1-40的範圍值,則有固定的資訊量上限,而且圖片的大小會固定在一個大小上,不會根據資訊量的多少而變化。
以上就是在應用QRCode這個工具時遇到的一些問題,留檔備案。