Android zxing如何識別反轉(zhuǎn)二維碼詳解
前言
說起二維碼掃描,估計很多人用的是 zxing 吧。
需要學(xué)習的朋友們也可以先看看這篇文章:http://chabaoo.cn/article/99765.htm
然而 zxing 雖然好用,但是卻有一些坑。
這邊分析一下自己實際項目遇到的一個坑。
什么坑呢?
下面舉個栗子你就懂了。
這邊生成二維碼使用的是網(wǎng)絡(luò)上的一個網(wǎng)站聯(lián)圖
以百度為例,正常情況生成的二維碼如下:
這種情況下用 zxing 分分鐘就可以識別出來。
但是假設(shè)我將前景色和后景色調(diào)換,生成的二維碼如下:
這種情況下 zxing 就識別不出了。
所以說這種時候就很無奈了。畢竟有些場景就需要用到反轉(zhuǎn)二維碼。
所以本篇說的 zxing 的坑就是無法識別反轉(zhuǎn)二維碼。
咋辦呢?涼拌。
這種時候就需要去源碼看看了。
看一下二維碼解析的代碼邏輯在哪?
通過一番折騰,跟蹤調(diào)試,最后定位到如下位置:
關(guān)鍵代碼:(DecodeHandler.java 里面的 decode 方法)
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
如果要識別上面的反轉(zhuǎn)百度二維碼,需要如何處理呢?
很簡單,只需要將上面的代碼改為:
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source.invert()));
即可。
到了這里,相信聰明的你應(yīng)該知道如何讓 zxing 同時支持兩種格式了。
只需要設(shè)置一個計數(shù)器,然后在指定次數(shù)(比如前 3 次)里面使用
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
在另外次數(shù)(比如后 3 次)里面使用
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source.invert()));
交替使用即可。
這樣就可以解決正轉(zhuǎn)和反轉(zhuǎn)二維碼的識別了。
NOTE:
- 通過交替識別可能會降低識別速度,因此次數(shù)設(shè)置為多少需要自己調(diào)試把控。
- 計數(shù)時注意避免次數(shù)溢出。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
android imageview圖片居中技巧應(yīng)用
做UI布局,尤其是遇到比較復(fù)雜的多重LinearLayout嵌套,常常會被一些比較小的問題困擾上半天,可是無論怎樣設(shè)置layout_gravity屬性,都無法達到效果2012-11-11React?Native之在Android上添加陰影的實現(xiàn)
這篇文章主要介紹了React?Native之在Android上添加陰影的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03Android使用Intent啟動其他非系統(tǒng)應(yīng)用程序的方法
這篇文章主要介紹了Android使用Intent啟動其他非系統(tǒng)應(yīng)用程序的方法,實例分析了Intent調(diào)用系統(tǒng)應(yīng)用程序的相關(guān)技巧,需要的朋友可以參考下2015-12-12Flutter搞定寬高不統(tǒng)一布局開發(fā)的方法詳解
我們在開發(fā)移動端界面的時候,經(jīng)常會遇到一組尺寸不一的組件需要作為同一組展示,所以本文就將利用Wrap組件搞定寬高不統(tǒng)一布局開發(fā),需要的可以參考一下2023-06-06Android編程實現(xiàn)提取網(wǎng)址鏈接的方法
這篇文章主要介紹了Android編程實現(xiàn)提取網(wǎng)址鏈接的方法,涉及Android針對字符串的正則匹配操作相關(guān)技巧,需要的朋友可以參考下2016-10-10