深度解析iPhone 二维码使用说明

移动开发 iOS
本文介绍的是深度解析iPhone 二维码使用说明,二维条码/二维码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息,来看内容。

深度解析iPhone 二维码使用说明是本文要介绍的内容,二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。不多说,我们直接来奥康纳内容详解。

1、二维码简介

二维码 (2-dimensional bar code) 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理: 二维条码/二维码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息。

2、获取iphone开源代码工程

http://code.google.com/p/zxing/

首先我们工具上面的地址直接下载开源的代码,详见图1

深度解析iPhone 二维码使用说明

下载到本地以后解压进入文件夹可以看到

iphone文件夹-->(在点击进入)

ScanTest(测试工程) 和 ZXingWidget(连接库 .a)

3、编译ZXingWidget并且在工程中调用

因为在4.0以上才有提供获取摄像头数据的类 AVCaptureDeviceInput AVCaptureVideoDataOutput类等 (这样我们在4.x上面才能自动对焦对二维码进行解码,获取二维码的信息)

其中在ZXingWidget静态库

ZXingWidgetController.h中为我们提供了 HAS_AVFF的判断开关(默认为1)

这样的话 ZXingWidget 工程只能 选择 Base SDK 4.0

如图2

深度解析iPhone 二维码使用说明

下编译才能通过

编译完.a后那打开ScanTest工程 一样选择 Base SDK 4.0 编译工程就可以编译运行成功

其中二维码解码的调用可以详见

RootViewController.mm的文件 可以看到 方法

//此方法就是调用 调用摄像头数据自动对焦解码

  1. - (IBAction)scanPressed:(id)sender  
  2. {  
  3. //此处代码 详见工程  
  4. }  
  5. //以下delegate 方法返回 解码结果  
  6. #pragma mark ZXingDelegateMethods  
  7.  
  8. - (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result  
  9. {  

其实到这边为止我们已经可以编译的程序可以在4.x以上的机子运行了

但是这样只能支持4.x 这里我们难道不能支持3.x的机子码?

其实是可以的但是我们要修改添加一些代码

首先还是确保  静态库.a和调用程序 编译试在 BADE SDK 4.0

但是要在调用程序如 ScanTest中要修改工程的设置

如图3、4

- (IBAction)scanPressed:(id)sender 

- (IBAction)scanPressed:(id)sender

修改完设置后然后拷贝以下的代码 替换 原来

scanPressed的方法

  1. - (IBAction)scanPressed:(id)sender {  
  2. if (NSClassFromString(@"AVCaptureSession") && NSClassFromString(@"AVCaptureVideoPreviewLayer"))  
  3. {  
  4. MLOG(@"__IPHONE_4_0");  
  5. ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];  
  6. widController.view.backgroundColor = [UIColor blueColor];  
  7. QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];  
  8. NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];  
  9. [qrcodeReader release];  
  10. widController.readers = readers;  
  11. [readers release];  
  12. NSBundle *mainBundle = [NSBundle mainBundle];  
  13. widController.soundToPlay =  
  14. [NSURL fileURLWithPath:[mainBundle pathForResource:@"beep-beep" ofType:@"aiff"] isDirectory:NO];  
  15. [self presentModalViewController:widController animated:YES];  
  16. [widController release];  
  17. }  
  18. else//3.x以下的固件系统*/  
  19. {  
  20. MLOG(@"__IPHONE_3_0");  
  21. UIImagePickerController *pickCtr = [[UIImagePickerController alloc] init];  
  22. pickCtr.sourceType = UIImagePickerControllerSourceTypeCamera;  
  23. pickCtr.delegate = self;  
  24. [self presentModalViewController:pickCtr animated:YES];  
  25. [pickCtr release];  
  26. }  
  27. }  
  28. #pragma mark -  
  29. #pragma mark UIImagePickerControllerDelegate  
  30.  
  31. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info  
  32. {  
  33. NSLog(@"info ==== %@", info);  
  34. UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];  
  35. QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];  
  36. NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];  
  37. [qrcodeReader release];  
  38. CGRect cropRect = [UIScreen mainScreen].applicationFrame;  
  39. Decoder *d = [[Decoder alloc] init];  
  40. d.readers = readers;  
  41. d.delegate = self;  
  42. int res = [d decodeImage:image];  
  43. MLOG(@"res === %d", res);  
  44. [d release];  
  45. [self dismissModalViewControllerAnimated:YES];  
  46. }  
  47. - (void)decoder:(Decoder *)decoder didDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset withResult:(TwoDDecoderResult *)twoDResult {  
  48. MLOG(@"twoDResult text ==== %@", [twoDResult text]);  
  49. UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[twoDResult text] message:[twoDResult text] 
  50. delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];  
  51. [alertView show];  
  52. [alertView release];  
  53. }  
  54.  
  55. - (void)decoder:(Decoder *)decoder failedToDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset reason:(NSString *)reason {  
  56. MLOG(@"twoDResult text ==== failedToDecodeImage");  
  57. 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 二维码使用说明的内容介绍完了,希望本文对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2024-06-26 08:46:45

2013-01-30 12:16:49

二维码NFC近场通讯

2014-08-27 08:59:28

2023-11-17 09:07:51

.NET生成二维码识别二维码

2017-02-21 09:17:46

二维码漏洞

2023-11-17 15:44:06

C++库生成二维码

2015-11-09 13:03:47

JavaServlet创建二维码

2011-12-06 16:40:45

二维码快拍二维码灵动快拍

2015-01-14 09:46:52

Google API

2012-04-01 09:53:13

二维码

2023-12-25 14:53:36

2014-03-05 14:41:55

二维码登录

2015-09-24 09:56:19

.NET二维码

2011-12-30 17:09:41

二维码APP灵动快拍

2023-08-08 14:16:07

二维码开发鸿蒙

2024-06-03 10:33:08

2020-10-08 18:48:02

二维码安全应用安全网络攻击

2015-10-28 13:33:50

二维码条形码扫描源码

2011-11-24 16:00:23

信息图QR码二维码

2020-10-26 11:09:42

二维码网络犯罪应用安全
点赞
收藏

51CTO技术栈公众号