深度解析iPhone 二維碼使用說明
深度解析iPhone 二維碼使用說明是本文要介紹的內容,二維碼是用某種特定的幾何圖形按一定規律在平面(二維方向上)分布的黑白相間的圖形記錄數據符號信息的。不多說,我們直接來奧康納內容詳解。
1、二維碼簡介
二維碼 (2-dimensional bar code) 是用某種特定的幾何圖形按一定規律在平面(二維方向上)分布的黑白相間的圖形記錄數據符號信息的;在代碼編制上巧妙地利用構成計算機內部邏輯基礎的“0”、“1”比特流的概念,使用若干個與二進制相對應的幾何形體來表示文字數值信息,通過圖象輸入設備或光電掃描設備自動識讀以實現信息自動處理: 二維條碼/二維碼能夠在橫向和縱向兩個方位同時表達信息,因此能在很小的面積內表達大量的信息。
2、獲取iphone開源代碼工程
http://code.google.com/p/zxing/
首先我們工具上面的地址直接下載開源的代碼,詳見圖1
下載到本地以后解壓進入文件夾可以看到
iphone文件夾-->(在點擊進入)
ScanTest(測試工程) 和 ZXingWidget(連接庫 .a)
3、編譯ZXingWidget并且在工程中調用
因為在4.0以上才有提供獲取攝像頭數據的類 AVCaptureDeviceInput AVCaptureVideoDataOutput類等 (這樣我們在4.x上面才能自動對焦對二維碼進行解碼,獲取二維碼的信息)
其中在ZXingWidget靜態庫
ZXingWidgetController.h中為我們提供了 HAS_AVFF的判斷開關(默認為1)
這樣的話 ZXingWidget 工程只能 選擇 Base SDK 4.0
如圖2
下編譯才能通過
編譯完.a后那打開ScanTest工程 一樣選擇 Base SDK 4.0 編譯工程就可以編譯運行成功
其中二維碼解碼的調用可以詳見
RootViewController.mm的文件 可以看到 方法
//此方法就是調用 調用攝像頭數據自動對焦解碼
- - (IBAction)scanPressed:(id)sender
- {
- //此處代碼 詳見工程
- }
- //以下delegate 方法返回 解碼結果
- #pragma mark ZXingDelegateMethods
- - (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result
- {
- }
其實到這邊為止我們已經可以編譯的程序可以在4.x以上的機子運行了
但是這樣只能支持4.x 這里我們難道不能支持3.x的機子碼?
其實是可以的但是我們要修改添加一些代碼
首先還是確保 靜態庫.a和調用程序 編譯試在 BADE SDK 4.0
但是要在調用程序如 ScanTest中要修改工程的設置
如圖3、4
修改完設置后然后拷貝以下的代碼 替換 原來
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以下的固件系統*/
- {
- 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編譯完以后就可以自動識別機子固件調用不同的解碼方式了
其中 在4.0以上的我們試自動對焦解碼二維碼
在4.0以下的我們試調用照相的功能然后對拍出來的圖片進行解碼
4、自己模擬二維碼測試數據
我們可以在瀏覽器中輸入
http://chart.apis.google.com/chart?cht=qr&chs=150x150&chl=http://www.hiapk.com
就可以看到看到如圖5所示 google的開源二維碼
cht就是代表生成二維碼的類型
其中chs代表二維碼生成的大小
chl就是代表二維碼顯示的信息
以上這些信息都可以自己修改(最好不要修改cht 二維碼類型)然后用剛才編譯出的程序進行測試
正確的結果試會解碼出chl的內容
小結:深度解析iPhone 二維碼使用說明的內容介紹完了,希望本文對你有所幫助!