原文http://blog.csdn.net/xialibing103/article/details/8011904
如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影。而手机等移动设备又成为二维码的一个很好的应用平台,不管是生成二维码还是扫码二维码。
下面介绍一下如何在苹果iOS设备上使用二维码:
1. 扫描二维码(解码)
扫描二维码的开源库有很多如 ZBar、ZXing等。在此以ZBar作为例子构建二维码扫码应用。
首先在github上下载ZBar SDK
地址https://github.com/bmorton/ZBarSDK
打开压缩包,其中有ZBarSDK 文件夹
将ZBarSDK 文件夹包含到项目中来
(Finder)
(XCode)
其中包含一个libzbar.a的静态库
接着往项目中添加Framework框架及链接库(动态库、静态库)。在项目属性TARGETSSummary 中找到Linked Frameworks and Libraries
添加
AVFoundation.framwork, CoreMedia.framework, CoreVideo.framework, libiconv.dylib 和libzbar.a (如图)
然后在使用的地方引入头文件
#import "ZBarSDK.h"
调用ZBar的类必须实现ZBarReaderDelegate协议
如:UIViewController <ZBarReaderDelegate>
在- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
最后在协议方法中通过info获取结果值
[cpp] view plain copy print ?
- id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
- ZBarSymbol *symbol = nil;
- for(symbol in results)
-
- break;
-
-
- resultText.text = symbol.data;
[cpp] view plain copy print ?
- id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
- ZBarSymbol *symbol = nil;
- for(symbol in results)
-
- break;
-
-
- resultText.text = symbol.data;
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
// EXAMPLE: just grab the first barcode
break;
// EXAMPLE: do something useful with the barcode data
resultText.text = symbol.data;
文档地址http://zbar.sourceforge.net/iphone/sdkdoc/
二维码开源库ZXing的加载过程与此类似,但是ZXing默认并不支持一维码的扫描,而ZBar是支持的。
2. 生成二维码(编码)
在生成二维码的库中QREncoder 比较好用。ZXing库的android版本是带java版的编码库的但不知为何没有C++版的解码库,故在ios上也没法解码,如果应用中既要生成二维码又要扫描二维码就有可能要带两套不同的库。
首先同样是在github 上下载到SDK库
地址https://github.com/jverkoey/ObjQREncoder
解压后将源码库直接包含到项目中来(如图)
设置头文件路径,在TARGET中building settings Search Path
当然也可以直接将库编译成静态库libQREcoder.a然后在包含进来
接着在Frameworks 中添加静态库的引用
然后在使用该库的地方包含头文件
#import <QREncoder/QREncoder.h>
注意:二维码显示的时候有可能会因为图像的大小而做调整,所以需要包含系统库QuartzCore.framework
最后就可以调用编码库了:
[cpp] view plain copy print ?
- UIImage* image = [QREncoder encode:@"http://www.baidu.com/"];
[cpp] view plain copy print ?
- UIImage* image = [QREncoder encode:@"http://www.baidu.com/"];
UIImage* image = [QREncoder encode:@http://www.baidu.com/];
===================================================================================================================================
1,扫描二维码可以用Zxing或者Zbar(Zbar没有用过);Zxing这个项目中同时包含了Java和C#方面的支持,但是在IOS这块,Zxing只能扫描,不能生成;
2,生成二维码有一些方案,但是ObjQRencoder这个方案不支持中文,目前也基本上没有解决方案;能顺利支持中文二维码的只找到了一个libqrencode;
3,在app4code网站中有一个关于Zbar和libqrencode的集成方案,这个方案对于想了解这方面的人来说很省事,大家就不要折腾其他的了。选择这个方案吧;
4,二维码在编码生成的时候有自己的小规模规范,比如支持sms,http,bizcard,vcard,tel,email等等,这个规范可以在google中找到;
5,一般的二维码编码有一个参数,什么High,Low,等等,如果我没有理解错的话其实是指容错率。越High容错的能力越强,但是编码的密度越高,扫描识别的难度越大;
6,彩色二维码是很赞,但是一定程度上来说对于扫描识别率低的就存在问题了;
7,小小二维码的存储量惊人的大,而且扫描识别速度惊人的快,对比发现专业的扫描枪在扫描一维码的时候不比手机扫描二维码快多少(当然也有可能是因为这是感官测试),这句话的实质意思就是说二维码如果能够扫描的话,扫描速度那是惊人的快!(摄像头够好)
http://blog.csdn.net/platform/article/details/7838195原文