QRScanReader.m
1.78 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
50
51
52
53
54
55
//
// 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:(RCTResponseErrorBlock)failure){
dispatch_sync(dispatch_get_main_queue(), ^{
NSString *result = [self readerQR:fileUrl];
if(result){
success(result);
}else{
NSString *domain = @"yitang.xiao";
NSString *desc = NSLocalizedString(@"没有相关二维码", @"");
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : desc };
NSError *error = [NSError errorWithDomain:domain
code:404
userInfo:userInfo];
failure(error);
}
});
}
-(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