今天做項目的時候需要添加一個根據識別二維碼圖片,以下就是實現的步驟以及相關代碼:
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解析二維碼圖片的方法,以及相關代碼,希望對大家有所幫助。