android 掃描二維碼

關(guān)于二維碼的了解

我們現(xiàn)在常用的二維碼為QR碼作為編碼的碼制,他是在一個(gè)矩形空間內(nèi)通過黑嚎莉、白像素在矩陣中的不同分布來進(jìn)行編碼的。我們知道電腦是使用二進(jìn)制數(shù)字來儲存和處理數(shù)據(jù)的,而在二維碼中华临,用黑白矩陣來表示二進(jìn)制數(shù)據(jù)窘行,而我們?nèi)庋劭吹降暮谏硎镜氖嵌M(jìn)制“1”饥追,白色表示的是二進(jìn)制“0”,黑白的排列組合確定了矩陣式二維碼的內(nèi)容罐盔,以便計(jì)算機(jī)對二維碼符合進(jìn)行編碼和分析但绕。通過黑白表示1和0這就是為什么二維碼都是黑白圖形的原因。
二維碼掃描定位流程:首先手機(jī)拍照惶看,拍到的照片是彩色的捏顺,對于掃描的二維碼也是一樣,他默認(rèn)也是彩色的纬黎,只不過顏色有深淺之分草丧,所以識別軟件正式依靠顏色的深淺來完成對二維碼識別的第一步

  • 第一步叫做灰度化,也就是說顏色深的按深灰處理莹桅,顏色淺的按淺灰處理昌执,
    僅僅有了灰度還是不夠的烛亦,因?yàn)閽呙柽€受周圍的環(huán)境的影響,會有噪點(diǎn)懂拾,所以
  • 第二部就是去噪煤禽。
    完成了上面的兩部,就進(jìn)入了至關(guān)重要的二值化流程岖赋,上面已經(jīng)說過計(jì)算機(jī)采用二進(jìn)制檬果,而將深度和淺度灰階的圖案轉(zhuǎn)換成只有黑色和白色兩種顏色,也就是二值化處理的任務(wù)唐断。在二值化處理時(shí)选脊,二維碼將會首先被解讀成白色黑色的條碼。然后根據(jù)解析公式和閾值運(yùn)算將其轉(zhuǎn)化成二進(jìn)制信息脸甘,也許再深入講解公式可能一般人不能理解恳啥,但是我們要知道,二值化是一個(gè)非常復(fù)雜而且需要相當(dāng)準(zhǔn)確的步驟丹诀。
  • 結(jié)束了上面步驟后再就是 尋找探測圖形钝的? 也就是找到二維碼的位置,經(jīng)趁猓看二維碼的朋友都知道硝桩,二維碼上有三個(gè)方塊,這三個(gè)方塊有什么作用枚荣?代表了怎樣的含義呢碗脊?其實(shí)它的準(zhǔn)確叫法就是位置探測圖形。有了這三個(gè)點(diǎn)橄妆,不管是從哪個(gè)方向讀取二維碼衙伶,信息都可以被識別。即使將二維碼圖形旋轉(zhuǎn)呼畸,也可以識別痕支。它的作用主要是方便識別和決定二維碼符號中模塊的坐標(biāo)颁虐,當(dāng)?shù)玫搅艘粋€(gè)可識別的二維碼后蛮原,接下來的工作就是譯碼和糾錯(cuò)。
  • 譯碼就是對二維碼中所包含的格式信息另绩、版本信息儒陨、數(shù)據(jù)和糾錯(cuò)碼信息進(jìn)行解碼和比對,而糾錯(cuò)是在譯碼的同時(shí)進(jìn)行的笋籽。其實(shí)蹦漠,一個(gè)二維碼除了上面講到的探測圖形外,還有各種譯碼信息被集成在二維碼中车海,通過二維碼包含信息示意圖我們就可以對一個(gè)二維碼所含的信息元素有大概的了解笛园。完成了譯碼,手機(jī)上從二維碼的識別到解碼的工作就完成了。

說到二維碼掃描 那就肯定是少不了 ZXing 庫的使用了研铆,zxing是由google開發(fā)的開源二維碼掃描庫埋同,支持條形碼和二維碼的掃描,git 地址為:zxing github地址棵红。

android庫組成:

  • core : 圖片解碼的核心內(nèi)容和測試代碼凶赁。
  • javase: javaSE-special 客戶端代碼
  • android: android客戶端掃描代碼
  • androidtest:android測試app和ZXing 測試代碼。
  • android-integration: 支持通過intent 啟動二維碼的掃描逆甜。
  • android-core:android 相關(guān)代碼的共享
  • glass:簡單的谷歌 glass app虱肄。

zxing還 提供了ios 和 java等客戶端的支持。

cpp
C++ port

iphone
iPhone client

objc
Objective C port

actionscript
Partial ActionScript port

jruby
JRuby wrapper

基于ZXing的第三方庫

這個(gè)使用啟動來要簡單一點(diǎn)交煞,
庫的地址為:https://github.com/journeyapps/zxing-android-embedded

如何使用這個(gè)庫

只需要在build.gradle 文件中添加如下內(nèi)容:

repositories{
 jcenter()
}
dependencies{ 
compile 'com.journeyapps:zxing-android-embedded:3.0.2@aar' 
compile 'com.google.zxing:core:3.2.0'
}

然后更新gradle咏窿,就會自動導(dǎo)入庫了
導(dǎo)入完后使用:

//Activity中使用
new IntentIntegrator(this).initiateScan();

/*fragment中使用*/
IntentIntegrator.forFragment(this).initateScan();
//如果使用的是兼容包中的fragment則使用下面的方法
IntentIntegrator.forSupportFragment.initateScan();

如需要更多的設(shè)置可以在:

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES);
integrator.setPrompt("Scan a barcode");
integrator.setCameraId(0);
 // Use a specific camera of the deviceintegrator.setBeepEnabel(false);
integrator.setBarcodeImageEnable(true);integrator.initiateScan();

獲取掃描到的結(jié)果

// Get the results:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
   if(result != null) { 
       if(result.getContents() == null) {                          
           Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show(); 
         } else { 
                Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
           } 
       } else { 
              super.onActivityResult(requestCode, resultCode, data);
      }
}
設(shè)置方向:

方向這個(gè)問題可以通過 建立一個(gè)CaptureActivityAnyOrientation,這個(gè)activity集成字CaptureActivity错敢,然后你在manifest中設(shè)置這activity的方向翰灾,

<activity android:name=".CaptureActivityAnyOrientation"  
android:screenOrientation="fullSensor"
android:stateNotNeeded="true"
android:theme="@style/zxing_CaptureTheme"
android:windowSoftInputMode="stateAlwaysHidden"></activity>

通過設(shè)置這個(gè)capture activity來限制取景界面的方向。

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setCaptureActivity(CaptrueActivityAnyOrientation.class);
integrator.setOrientationLocked(false);
integrator.initiateScan();
參考

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稚茅,一起剝皮案震驚了整個(gè)濱河市纸淮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亚享,老刑警劉巖咽块,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異欺税,居然都是意外死亡侈沪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門晚凿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亭罪,“玉大人,你說我怎么就攤上這事歼秽∮σ郏” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵燥筷,是天一觀的道長箩祥。 經(jīng)常有香客問我,道長肆氓,這世上最難降的妖魔是什么袍祖? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮谢揪,結(jié)果婚禮上蕉陋,老公的妹妹穿的比我還像新娘捐凭。我一直安慰自己,他們只是感情好凳鬓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布柑营。 她就那樣靜靜地躺著,像睡著了一般村视。 火紅的嫁衣襯著肌膚如雪官套。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天蚁孔,我揣著相機(jī)與錄音奶赔,去河邊找鬼。 笑死杠氢,一個(gè)胖子當(dāng)著我的面吹牛站刑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鼻百,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绞旅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了温艇?” 一聲冷哼從身側(cè)響起因悲,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勺爱,沒想到半個(gè)月后晃琳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琐鲁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年卫旱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片围段。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顾翼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奈泪,到底是詐尸還是另有隱情适贸,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布段磨,位于F島的核電站取逾,受9級特大地震影響耗绿,放射性物質(zhì)發(fā)生泄漏苹支。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一误阻、第九天 我趴在偏房一處隱蔽的房頂上張望债蜜。 院中可真熱鬧晴埂,春花似錦、人聲如沸寻定。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狼速。三九已至琅锻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間向胡,已是汗流浹背恼蓬。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留僵芹,地道東北人处硬。 一個(gè)月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像拇派,于是被迫代替她去往敵國和親荷辕。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,152評論 25 707
  • 源碼地址 谷歌官方有一個(gè)關(guān)于二維碼的zxing項(xiàng)目件豌,地址為zxing疮方,但是這個(gè)庫對于安卓應(yīng)用來說太大了。有一個(gè)開發(fā)...
    gustiness閱讀 1,911評論 0 6
  • weex android 其實(shí)已經(jīng)內(nèi)置了zxing的掃描二維碼的功能茧彤,我們需要做的就是將其封裝成一個(gè)weex可以使...
    拾大花sdf閱讀 1,385評論 0 1
  • 1.接入二維碼功能(zxing)案站,借鑒他人的資源:鏈接:http://www.reibang.com/p/4fe2...
    Tony1213閱讀 4,006評論 0 3
  • 小時(shí)候,爸媽長年外出打工棘街,在寒暑假蟆盐,我才能跟他們呆長一點(diǎn)時(shí)間。 而在寒暑假來之前我會好幾個(gè)月不掏耳洞遭殉,只為在午后陽...
    古月NoraHu閱讀 1,308評論 0 0