由于之前项目中只要求扫一扫功能,没有要求去识别相册中的条形码和二维码功能,所以刚开始用的系统中的AVFoundation框架里边的AVCaptureOutput去做的扫描。
后来项目升级之后要求去识别自己相册里照片中的二维码/条形码,那问题就来了,经过测试之后AVCaptureMetadataOutputObjectsDelegate并不能识别相册中的条形码,不知道是不是系统中的bug还是什么。
所以呢最终决定使用第三方ZBarSDK来做识别相册中二维码/条形码的功能。其实这个功能最重要的步骤就是利用ZBarSDK这个第三方去识别图片中的二维码/条形码信息,比如条码字符串,扫码图像,扫码码的类型,码制这种信息,那我们拿到这些信息之后就可以把我们需要的东西传给我们的服务端或者是其他用途。
好了废话不多说下边就是ZBarSDK识别相册照片具体用法:
1。在viewDidLoad方法中创建按钮
2.打开相册
3.选中照片的回调方法里用ZBarSDK的东西去处理相片内容
彩蛋:
如果有同学需求上有打开或者关闭手电筒的要求,写法请看下:
- (void)lampBtnClick:(UIButton*)sender
{
ClasscaptureDeviceClass =NSClassFromString(@"AVCaptureDevice");
if(captureDeviceClass !=nil)
{
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if([devicehasTorch])
{
[devicelockForConfiguration:nil];
if(isLight==NO)
{
//打开手电筒
lightLabel.textColor=ShangJia_NAVCOLOR;
lightLabel.text=LocalizedApp(@"輕觸關閉");
lightImageView.image= [UIImageimageNamed:@"mk_lamp_light"];
[devicesetTorchMode:AVCaptureTorchModeOn];
}elseif(isLight==YES)
{
//关闭手电筒
lightLabel.textColor = [UIColor whiteColor];
lightLabel.text=LocalizedApp(@"輕觸點亮");
lightImageView.image= [UIImageimageNamed:@"mk_lamp_normal"];
[devicesetTorchMode:AVCaptureTorchModeOff];
}
[deviceunlockForConfiguration];
}elseif(![devicehasTorch])
{
[[[UIAlertView alloc] initWithTitle:Localized(@"提示", nil)
message:Localized(@"您的設備暫不支持手電筒!",nil)
delegate:nil
cancelButtonTitle:Localized(@"知道了",@"")
otherButtonTitles:nil]
show];
}
isLight =! isLight;
}else
{
[[[UIAlertView alloc] initWithTitle:Localized(@"提示", nil)
message:Localized(@"您的設備暫不支持手電筒!",nil)
delegate:nil
cancelButtonTitle:Localized(@"知道了",@"")
otherButtonTitles:nil]
show];
}
}