ZXing二维码扫描


一、  二维码

1.二维码名片

它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。

2.二维码分类

二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码。 堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成;矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1”, 用“空”表示二进制“0”,“点”和“空”的排列组成代码。

二、  ZxingZBar

1扫描二维码可以用Zxing或者Zbar(Zbar没有用过);Zxing这个项目中同时包含了Java和C#方面的支持,但是在iOS这块,Zxing只能扫描,不能生成;

2ZXing可以直接扫二维码,如果要扫条形码,则需要去改改代码花点功夫了。ZBar也可以找到,但是据了解,ZBar的源码包含其他各平台的源码,代码较乱,ZBar的源码找起来比较费功夫。

3Zxing需要注意中文的乱码问题

三、  Zxing配置问题

1Zxing最新下载地址是:http://code.google.com/p/zxing/downloads/list

 提示:注意下载的文件是十几兆的文件,Zxing目前最新版本为Zxing2.1,此文档还是基于Zxing2.0来说;

2)解压下载过来的文件,只保留“cpp”“iPhone”这两个文件夹,因为里面包含有其他开发语言的SDK,我们只需要iOS方向的文件;

3)拷贝这个文件夹到项目的根目录下:

4)点击"File"选择Add filesto...,在弹出的框中,找到:你的项目文件夹/zxing-2.0/iphone/ZXingWidget下面,选择"ZXingWidget.xcodeproj"(在添加前,先运行该项目,进行编译,如果成功,再进行此步添加!),并确保"Copy itemsinto destination group’s folder if needed"不被选中。然后点添加。会出现一个框框;这个框框可以理解为项目的一个工作区域;

5)添加库文件:Build Phases->Link

 Binary With Libraries”->点击"+"。添加如下几项:

1libZXingWidget.a

2AddressBook

3AddressBookUI

4AudioToolbox

5AVFoundation

6CoreMedia

7CoreVideo

8libiconv.dylib

6Build Phases->Target Dependencies

6)由于很多Zxing的代码还没有添加到我们的项目中,如文件夹“cpp”,我们需要找到他们所以我们需要添加一个路径:Build Settings-> headersearch paths(可以搜索);然后双击header search paths,点“

添加的路径是:1"../zxing-2.0/cpp/core/src/"

2"../zxing-2.0/iphone/ZXingWidget/Classes"(注意双引号添加上去);

7)现在编译,会出现;找不到文件,这是因为这Zxing是和C++的混编,所以需要把 .m文件的后缀改为 .mm

四、  ZXing二维码扫描

(1)  在项目中需要实现Zxing的delegate,所以在 .h中需要添加<ZXingDelegate>

(2)  在扫描button的响应事件中,添加一下代码

  ZXingWidgetController *widController =     [[ZXingWidgetControlleralloc] initWithDelegate:selfshowCancel:YESOneDMode:NO]; 

    QRCodeReader*qrcodeReader = [[QRCodeReaderalloc] init]; 

NSSet *readers = [[NSSetalloc ]                                                initWithObjects:qrcodeReader,nil]; 

   [qrcodeReader release]; 

    widController.readers = readers; 

   [readers release];

    // 界面的跳转

   [self presentModalViewController:widController    animated:YES]; 

[widControllerrelease];

(3)   在跳入ZXing的建立的窗口之后,ZXing正常扫描退出后,ZXing扫描有结果,会回调

- (void)zxingController:(ZXingWidgetController*)controller   didScanResult:(NSString *)result

       {

           self.resultsToDisplay = result; 

           if (self.isViewLoaded)

          

                      [m_resultsViewsetText:m_resultsToDisplay]; 

               } 

             [self dismissModalViewControllerAnimated:NO]; 

       }

五、  Zxing条形码扫描

Zxing扫描条形码和二维码不一样,因为二维码和条形码扫描的实现不是在同一个类中,我们需要将二维码中的:

QRCodeReader *qrcodeReader = [[QRCodeReaderalloc] init];

改为:

  MultiFormatOneDReader *oneReader = [[MultiFormatOneDReaderalloc]init];

要实现条形码的扫描,同时需要修改ZXing编写的一些代码;详细请参考   Zxing条形码.doc

注释:条形码和二维码可以同时写在一个Button的Action中,

   QRCodeReader *qrcodeReader = [[QRCodeReaderalloc] init];

MultiFormatOneDReader *oneReader = [[MultiFormatOneDReaderalloc]init];

NSSet *readers = [[NSSetalloc ] initWithObjects:qrcodeReader,oneReader,nil];


点击下载源码

上一篇:fastDFS 一二事 - 简易服务器搭建(单linux)


下一篇:“智物 智造”亮相云栖大会 远程操控工厂震撼骨灰级程序员