深度解析iPhone 二維碼使用說明
深度解析iPhone 二維碼使用說明是本文要介紹的內(nèi)容,二維碼是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的。不多說,我們直接來奧康納內(nèi)容詳解。
1、二維碼簡介
二維碼 (2-dimensional bar code) 是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的;在代碼編制上巧妙地利用構(gòu)成計算機(jī)內(nèi)部邏輯基礎(chǔ)的“0”、“1”比特流的概念,使用若干個與二進(jìn)制相對應(yīng)的幾何形體來表示文字?jǐn)?shù)值信息,通過圖象輸入設(shè)備或光電掃描設(shè)備自動識讀以實現(xiàn)信息自動處理: 二維條碼/二維碼能夠在橫向和縱向兩個方位同時表達(dá)信息,因此能在很小的面積內(nèi)表達(dá)大量的信息。
2、獲取iphone開源代碼工程
http://code.google.com/p/zxing/
首先我們工具上面的地址直接下載開源的代碼,詳見圖1
下載到本地以后解壓進(jìn)入文件夾可以看到
iphone文件夾-->(在點擊進(jìn)入)
ScanTest(測試工程) 和 ZXingWidget(連接庫 .a)
3、編譯ZXingWidget并且在工程中調(diào)用
因為在4.0以上才有提供獲取攝像頭數(shù)據(jù)的類 AVCaptureDeviceInput AVCaptureVideoDataOutput類等 (這樣我們在4.x上面才能自動對焦對二維碼進(jìn)行解碼,獲取二維碼的信息)
其中在ZXingWidget靜態(tài)庫
ZXingWidgetController.h中為我們提供了 HAS_AVFF的判斷開關(guān)(默認(rèn)為1)
這樣的話 ZXingWidget 工程只能 選擇 Base SDK 4.0
如圖2
下編譯才能通過
編譯完.a后那打開ScanTest工程 一樣選擇 Base SDK 4.0 編譯工程就可以編譯運行成功
其中二維碼解碼的調(diào)用可以詳見
RootViewController.mm的文件 可以看到 方法
//此方法就是調(diào)用 調(diào)用攝像頭數(shù)據(jù)自動對焦解碼
- - (IBAction)scanPressed:(id)sender
- {
- //此處代碼 詳見工程
- }
- //以下delegate 方法返回 解碼結(jié)果
- #pragma mark ZXingDelegateMethods
- - (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result
- {
- }
其實到這邊為止我們已經(jīng)可以編譯的程序可以在4.x以上的機(jī)子運行了
但是這樣只能支持4.x 這里我們難道不能支持3.x的機(jī)子碼?
其實是可以的但是我們要修改添加一些代碼
首先還是確保 靜態(tài)庫.a和調(diào)用程序 編譯試在 BADE SDK 4.0
但是要在調(diào)用程序如 ScanTest中要修改工程的設(shè)置
如圖3、4
修改完設(shè)置后然后拷貝以下的代碼 替換 原來
scanPressed的方法
- - (IBAction)scanPressed:(id)sender {
- if (NSClassFromString(@"AVCaptureSession") && NSClassFromString(@"AVCaptureVideoPreviewLayer"))
- {
- MLOG(@"__IPHONE_4_0");
- ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];
- widController.view.backgroundColor = [UIColor blueColor];
- QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
- NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];
- [qrcodeReader release];
- widController.readers = readers;
- [readers release];
- NSBundle *mainBundle = [NSBundle mainBundle];
- widController.soundToPlay =
- [NSURL fileURLWithPath:[mainBundle pathForResource:@"beep-beep" ofType:@"aiff"] isDirectory:NO];
- [self presentModalViewController:widController animated:YES];
- [widController release];
- }
- else//3.x以下的固件系統(tǒng)*/
- {
- MLOG(@"__IPHONE_3_0");
- UIImagePickerController *pickCtr = [[UIImagePickerController alloc] init];
- pickCtr.sourceType = UIImagePickerControllerSourceTypeCamera;
- pickCtr.delegate = self;
- [self presentModalViewController:pickCtr animated:YES];
- [pickCtr release];
- }
- }
- #pragma mark -
- #pragma mark UIImagePickerControllerDelegate
- - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
- {
- NSLog(@"info ==== %@", info);
- UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
- QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
- NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];
- [qrcodeReader release];
- CGRect cropRect = [UIScreen mainScreen].applicationFrame;
- Decoder *d = [[Decoder alloc] init];
- d.readers = readers;
- d.delegate = self;
- int res = [d decodeImage:image];
- MLOG(@"res === %d", res);
- [d release];
- [self dismissModalViewControllerAnimated:YES];
- }
- - (void)decoder:(Decoder *)decoder didDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset withResult:(TwoDDecoderResult *)twoDResult {
- MLOG(@"twoDResult text ==== %@", [twoDResult text]);
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[twoDResult text] message:[twoDResult text]
- delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
- [alertView show];
- [alertView release];
- }
- - (void)decoder:(Decoder *)decoder failedToDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset reason:(NSString *)reason {
- MLOG(@"twoDResult text ==== failedToDecodeImage");
- decoder.delegate = nil;
- }
這樣在4.0編譯完以后就可以自動識別機(jī)子固件調(diào)用不同的解碼方式了
其中 在4.0以上的我們試自動對焦解碼二維碼
在4.0以下的我們試調(diào)用照相的功能然后對拍出來的圖片進(jìn)行解碼
4、自己模擬二維碼測試數(shù)據(jù)
我們可以在瀏覽器中輸入
http://chart.apis.google.com/chart?cht=qr&chs=150x150&chl=http://www.hiapk.com
就可以看到看到如圖5所示 google的開源二維碼
cht就是代表生成二維碼的類型
其中chs代表二維碼生成的大小
chl就是代表二維碼顯示的信息
以上這些信息都可以自己修改(最好不要修改cht 二維碼類型)然后用剛才編譯出的程序進(jìn)行測試
正確的結(jié)果試會解碼出chl的內(nèi)容
小結(jié):深度解析iPhone 二維碼使用說明的內(nèi)容介紹完了,希望本文對你有所幫助!