今天做项目的时候需要添加一个根据识别二维码图片,以下就是实现的步骤以及相关代码:
1.在选择相册图片响应的代理事件(- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info)获取图片,并将其转换成NSData。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
if ([type isEqualToString:@"public.image"]) {
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
NSData *imageData = UIImagePNGRepresentation(image);
//imgView.image = image;
[picker dismissViewControllerAnimated:YES completion:nil];
[self readQRCodeFromImageWithFileURL:imageData];
}
}
2.iOS8以后可以直接使用 CIQRCodeFeature进行解析,代码如下:
- (void)readQRCodeFromImageWithFileURL:(NSData *) data {
CIImage *image = [CIImage imageWithData:data];
//CIImage *image = [CIImage imageWithContentsOfURL:url];// 也可以根据URL找到CIImage
if (image){
//创建CIDetector
CIDetector *qrDetector = [CIDetector detectorOfType:CIDetectorTypeQRCode
context:[CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(YES)}]
options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh}];
NSArray *features = [qrDetector featuresInImage:image];
if ([features count] > 0){
for (CIFeature *feature in features){
if (![feature isKindOfClass:[CIQRCodeFeature class]]){
continue;
}
CIQRCodeFeature *qrFeature = (CIQRCodeFeature *)feature;
NSString *content = qrFeature.messageString;//解析的数据
NSLog(@"content is :%@",content);
}
}
}
[self.extensionContext completeRequestReturningItems:nil
completionHandler:^(BOOL expired) {
NSLog(@"解析失败");
}];
}
以上就是ios解析二维码图片的方法,以及相关代码,希望对大家有所帮助。