QRScanReader.m
1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//
// QRScanReader.m
// Bitcoin
//
// Created by lewin on 2018/3/14.
// Copyright © 2018年 Facebook. All rights reserved.
//
#import "QRScanReader.h"
#import <AVFoundation/AVFoundation.h>
#import <CoreImage/CoreImage.h>
@implementation QRScanReader
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD(readerQR:(NSString *)fileUrl success:(RCTPromiseResolveBlock)success failure:(RCTPromiseRejectBlock)failure){
dispatch_sync(dispatch_get_main_queue(), ^{
NSString *result = [self readerQR:fileUrl];
if(result){
success(result);
}else{
failure(nil, @"没有检测到二维码", nil);
}
});
}
-(NSString*)readerQR:(NSString*)fileUrl{
fileUrl = [fileUrl stringByReplacingOccurrencesOfString:@"file://" withString:@""];
CIContext *context = [CIContext contextWithOptions:nil];
// CIDetector(CIDetector可用于人脸识别)进行图片解析,声明一个CIDetector,并设定识别类型 CIDetectorTypeQRCode
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:context options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}];
NSData *fileData = [[NSData alloc] initWithContentsOfFile:fileUrl];
CIImage *ciImage = [CIImage imageWithData:fileData];
NSArray *features = [detector featuresInImage:ciImage];
if(!features || features.count==0){
return nil;
}
//3. 获取扫描结果
CIQRCodeFeature *feature = [features objectAtIndex:0];
NSString *scannedResult = feature.messageString;
return scannedResult;
}
@end