82103253 2012-11-10
写这篇日志的目的是把这近一个星期以来,学到的二维码foriphone的编程,记录下来。现在开源免费的二维码库有两种,就是ZBar,ZXing。ZXing主要是为安卓服务设计的,ZBar则对于iphone开发来说更好一些,貌似库也小一些。最主要的原因还是ZBar开发文档好找一些。我之前是没接触过二维码,当时我老大跟我说二维码,我说这个可能要研究下,他很爽快,说,我给你时间,然后还给我了库,就是ZXing,因为安卓的已经弄出来了。然后我就心平气和的弄,第二天的时候把那个摄像头扫描的弄出来了,在这个过程中,有点问题就是引入库的时候出现了各种问题,源自于本人不细心。
[url]http://dale.leepood.com/tag/zxing/[/url]看的是这篇文章,照着那个做,网上其他文章也差不多就那样,相识度百分之九十九。
第一步:下载最新的库,我下的是zxing-2.0
第二步:点击项目名称,右键,Addfiletocode..,不拷贝。
第三步:还是项目名称里面操作,不是加入进来的zxing库,添加
ZXingWidget
第四步:导入那几个库,libZXingWidget.a导入之后是红色的,我也不知道怎么解决,但是运行起来好像是没问题。深圳那个库自带的例子里面根本就没加这个文件
第五步:”HeaderSearchPaths“其他的两个名字很像的也别管。还是项目名称的mainproject-----BuildSettings。找到之后添加路径,最好的办法就是打开终端,在zxing库中找到两个文件夹,路径是zxing/iphone/ZXingWidget/Classes和zxing/cpp/core/src/,然后把文件夹Classes和src拖入终端得到完整的路径,我的是/Users/chenshuangchao/Desktop/zxing-2.0/iphone/ZXingWidget/classes
第六步:加入那两个头文件,创建对象,就可以用了。
由于我的粗心,造成的问题有:
1.出现一堆C++的文件格式错误,.
解决办法,就是把涉及到解码的文件全部都由.m文件改成.mm文件,直接点击文件名进行修改。
2.那两个头文件不能用
问题在于导入库不成功,解决办法按照上面第五步。
如果不知道怎么用可以看zxing/iphone/ZXingWidget/scantest其实就是创建ZXingWidgetController对象,然后实现那个委托就行。
做到这里的时候才明白老大要我做的Demo是要打开本地图片,就是打开相册里面的图片,然后扫描选中的图片,百度一下,发现ZXing这方面资料很少,开发文档也没找到,而且在找资料的过程中发现了ZBar库有这个功能,我就开始尝试用ZBar库解决问题。
在下载ZBar库之后,发现它自带有开发文档,这下心里有底了,打开开发文档,就是那个Documentation.html(之前自己看了那自带的四个例子,感觉不爽,没怎么研究,而且那个实现文件libzbar.a也打不开,懒得去看了,所以就看开发文档)。
ZBar的使用比ZXing要简单的多,正如网上的,大致也就几步:
1.下载ZBarSDK添加到工程,这个最好copy
2.添加需要的framework
3.#import"ZBarSDK.h"添加协议ZBarReaderDelegate
4.然后设置一个按钮点击事件
ZBarReaderViewController*reader=[ZBarReaderViewControllernew];
reader.readerDelegate=self;
ZBarImageScanner*scanner=reader.scanner;
[scannersetSymbology:ZBAR_I25
config:ZBAR_CFG_ENABLE
to:0];
[selfpresentModalViewController:reader
animated:YES];
[readerrelease];
-(void)imagePickerController:(UIImagePickerController*)reader
didFinishPickingMediaWithInfo:(NSDictionary*)info
{
id<NSFastEnumeration>results=
[infoobjectForKey:ZBarReaderControllerResults];
ZBarSymbol*symbol=nil;
for(symbolinresults)
break;
NSLog(@"===%@",symbol.data);
self.tfOrderNumber.text=symbol.data;
[readerdismissModalViewControllerAnimated:YES];
}
上面代码应该是实现摄像头扫描的,打开本地文件扫描相册图片的代码是(见下面图片,本人试过的,为求速度,直接截图了,公司装的虚拟机,没办法);
这个例子做好了,最后发现项目要做的效果是给个链接,然后从链接处下载一张二维码图片,然后解析出二维码图片,返回二维码图片解析的结果,那么现在做的打开本地文件的还是不行,怎么办呢。百度,谷歌一番,英文水平不好,疼哭。。。不仅网上关于iphone二维码打开文件的很少,像我这样要解析指定地址图片的二维码几乎没有。那我就只能自己看开发文档了,又因为一个小问题,弄了一天,终于搞定了。使我成败明白这完全在于细节,就因为哥去上了趟厕所,途中碰到了一美女,然后心情不大好,再回来仔细一看开发文档和我的代码,原来在不经意间将调用ZBarReadController里面的方法写成了调用ZBarImageScanner里面的方法,这一下心情更好了,果断一气呵成,最好把整个模块给弄出来了。
扫描指定PATH的二维码图片不需要用到委托,直接一个方法就成,代码如下
写完,主要还是研究那个开发文档,网上的资料关于iphone的确实很少,有点坑爹啊,不想写了,这个代码我试了下,不能解决中文乱码问题,我在网上下了25张二维码进行解析测试,一半以上没问题,有几张不能解析,有几张有乱码,我觉得这是正常的,因为二维码来自日本,生成二维码的时候采用的编码可能关系到解码,日文当做中文解码就有问题,据说C语言好像能解决乱码问题。因为我在服务器上取的都能解析,所以我就不没做了,网速不好,源代码文件不传了
原文路径:http://blog.sina.com.cn/s/blog_68661bd801016fir.html