二维码的生成,iOS端使用二维码扫描

2019-11-26 16:35 来源:未知

  

 

1.下载ZBar SDK并导入工程
地址:https://github.com/bmorton/ZBarSDK
2.往项目中添加Framework框架及动态库

生成二维码:

如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影。手机中二维码使用也很广泛,如微信等。正好最近收集总结了下二维码的使用方法

AVFoundation.framework
CoreMedia.framework
CoreVideo.framework
libiconv.dylib
libber.a

 

下面介绍一下如何在iOS设备上使用二维码

3.在使用的地方引入头文件

在生成二维码的库中QREncoder最为常见,但是由于中文字符的特殊性,生成中文的时候有时会出现一定的错误,所以建议使用libqrencode,是一个纯C编写的类库.

首先在github上下载ZBar SDK
地址

#import "ZBarSDK.h"

 

然后将如下的相关类库添加进去

4.使用 ZBarReaderViewController扫描二维码

以libqrencode为例:

AVFoundation.framwork, CoreMedia.framework, CoreVideo.framework, libiconv.dylib 和libzbar.a

扫描:
- (void)scan:(id)sender{    
ZBarReaderViewController *reader = [[ZBarReaderViewController alloc] init];   
reader.readerDelegate = self;    reader.supportedOrientationsMask = ZBarOrientationMaskAll;    
ZBarImageScanner *scanner = reader.scanner;    [scanner setSymbology:ZBAR_I25 config:ZBAR_CFG_ENABLE to:0];       
reader.showsZBarControls = YES;       [self presentViewController:reader animated:YES completion:nil];
}

libqrencode官网:

接下来首先在.h文件中引用

现在获取二维码的相关信息:

github地址:

#import "ZBarSDK.h"

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo(NSDictionary *)info{    
id<NSFastEnumeration>results = [info objectForKey:ZBarReaderControllerResults];    
ZBarSymbol *symbol = nil;    //代码如何修改   
 for (symbol in results)        break;    //symbol = results;   
 imageVIew.image = [info objectForKey:UIImagePickerControllerOriginalImage];   
    [picker dismissViewControllerAnimated:YES completion:nil];
    _label.text = symbol.data;   
    NSLog(@"扫描内容:%@",symbol.data);
}

不过该工程没有针对iOS提供字符串转换为图像的代码,网络上有人新增了QRCodeGenerator类,针对iOS优化.

同时添加代理

5.使用 ZBarReaderView实现扫描页面高度订制
实现协议 ZBarReaderViewDelegate (UIAlertView)
并定义: ZBarReaderView *readerVIew;
ZBarCameraSimulator *cameraSim;

下载地址:

ZBarReaderDelegate

实现代码:
readerVIew = [[ZBarReaderView alloc]init];    readerVIew.frame = CGRectMake(50, 44, 200, 200);    readerVIew.readerDelegate = self;    //关闭闪光灯    readerVIew.torchMode = 0;    //扫描区域:很重要    CGRect scanMaskRect = CGRectMake(60, CGRectGetMidY(readerVIew.frame)-126, 200, 200);       //[readerVIew setAllowsPinchZoom:YES];       if (TARGET_IPHONE_SIMULATOR)//应为是否有权限?    {        cameraSim = [[ZBarCameraSimulator alloc]initWithViewController:self];        cameraSim.readerView = readerVIew;    }    [self.view addSubview:readerVIew];    //扫描区域计算:加上该代码后似乎无法扫描出结果了    readerVIew.scanCrop = [self getScanCrop:scanMaskRect readerViewBounds:readerVIew.bounds];    [readerVIew start];

 

 

区域范围:

使用:

1.扫描二维码(包括读取和解码)

-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds{    CGFloat x,y,width,height;       x = rect.origin.x / readerViewBounds.size.width;    y = rect.origin.y / readerViewBounds.size.height;    width = rect.size.width / readerViewBounds.size.width;    height = rect.size.height / readerViewBounds.size.height;       return CGRectMake(x, y, width, height);
}

将libqrencode加入到工程中,在需要用到的地方引入"QRCodeGenerator.h"

扫描二维码的开源库有很多如 ZBar、ZXing等。博主先尝试了ZXing,竖屏的情况下ZXing没有问题,但是似乎横屏会出现错位的情况。于是博主放弃ZXing,使用ZBar。

ZBarReaderViewDelegate的方法:

imageView为界面需要显示二维码的UIImageView;

这里要提一句,ZXing的开源做的比ZBar好,读取和解码速度也快,但是整合到自己的工程中是见痛苦的事情,不光是导入整个Demo工程,设置也相对繁琐,如果不是真的需要超高性能应用的开发者,博主还是建议使用ZBar。

- (void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image{    NSString *codeData = [[NSString alloc]init];    for (ZBarSymbol *sym in symbols)    {        codeData = sym.data;        break;    }    //可以获取到    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"扫描结果" message:codeData delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];    alert.delegate = self;    [alert show];    [readerVIew stop];
}

resultString为需要生成二维码的字符串;

总的流程如下:

打开获取到的信息:

imageView.image = [QRCodeGenerator qrImageForString:resultString imageSize:self.imageView.frame.size.height];

① 下载ZbarSDK,包含ZbarSDK头文件包、libzbar.a静态链接库文件以及资源文件三部分;

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{       [[UIApplication sharedApplication]openURL:[NSURL URLWithString:alertView.message]];
}

② 在新工程中导入以下框架:AVFoundation.framework、CoreMedia.framework、CoreVideo.framework、QuartzCore.framework、libiconv.dylib(已存在则不需要重新加入);

6.使用libqrencode生成二维码
步骤一:首先向工程中导入第三方库libqrencode
步骤二:向QRCodeGenerator.h或者整个项目中引入框架 #import <UIKit/UIKit.h>,否则会报错
步骤三:在相应的文件中引入头文件

③ 将ZbarSDK加入工程;

#import "QRCodeGenerator.h"

图片 1

步骤四:调用库中的方法生成图片(参数为字符串和图片大小)

TAG标签:
版权声明:本文由金沙澳门官网4166发布于中国史,转载请注明出处:二维码的生成,iOS端使用二维码扫描