// // ZXingWrapper.m // // // Created by lbxia on 15/1/6. // Copyright (c) 2015年 lbxia. All rights reserved. // #import "ZXingWrapper.h" #import "ZXingObjC.h" #import "LBXZXCaptureDelegate.h" #import "LBXZXCapture.h" typedef void(^blockScan)(ZXBarcodeFormat barcodeFormat,NSString *str,UIImage *scanImg); @interface ZXingWrapper() <LBXZXCaptureDelegate> @property (nonatomic, strong) LBXZXCapture *capture; @property (nonatomic,copy)blockScan block; @property (nonatomic, assign) BOOL bNeedScanResult; @end @implementation ZXingWrapper - (id)init { if ( self = [super init] ) { self.capture = [[LBXZXCapture alloc] init]; self.capture.camera = self.capture.back; self.capture.focusMode = AVCaptureFocusModeContinuousAutoFocus; self.capture.rotation = 90.0f; self.capture.delegate = self; } return self; } - (id)initWithPreView:(UIView*)preView block:(void(^)(ZXBarcodeFormat barcodeFormat,NSString *str,UIImage *scanImg))block { if (self = [super init]) { self.capture = [[LBXZXCapture alloc] init]; self.capture.camera = self.capture.back; self.capture.focusMode = AVCaptureFocusModeContinuousAutoFocus; self.capture.rotation = 90.0f; self.capture.delegate = self; self.block = block; CGRect rect = preView.frame; rect.origin = CGPointZero; self.capture.layer.frame = rect; //[preView.layer addSublayer:self.capture.layer]; [preView.layer insertSublayer:self.capture.layer atIndex:0]; } return self; } - (void)setScanRect:(CGRect)scanRect { self.capture.scanRect = scanRect; } - (void)start { [self.capture start]; self.bNeedScanResult = YES; } - (void)stop { self.bNeedScanResult = NO; [self.capture stop]; } - (void)openTorch:(BOOL)on_off { [self.capture setTorch:on_off]; } - (void)openOrCloseTorch { [self.capture changeTorch]; } #pragma mark - ZXCaptureDelegate Methods - (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result scanImage:(UIImage *)img { if (!result) return; if (!_bNeedScanResult) { return; } if ( _block ) { [self stop]; _block(result.barcodeFormat,result.text,img); } } + (UIImage*)createCodeWithString:(NSString*)str size:(CGSize)size CodeFomart:(ZXBarcodeFormat)format { ZXMultiFormatWriter *writer = [[ZXMultiFormatWriter alloc] init]; ZXBitMatrix *result = [writer encode:str format:format width:size.width height:size.width error:nil]; if (result) { ZXImage *image = [ZXImage imageWithMatrix:result]; return [UIImage imageWithCGImage:image.cgimage]; } else { return nil; } } + (void)recognizeImage:(UIImage*)image block:(void(^)(ZXBarcodeFormat barcodeFormat,NSString *str))block; { ZXCGImageLuminanceSource *source = [[ZXCGImageLuminanceSource alloc] initWithCGImage:image.CGImage]; ZXHybridBinarizer *binarizer = [[ZXHybridBinarizer alloc] initWithSource: source]; ZXBinaryBitmap *bitmap = [[ZXBinaryBitmap alloc] initWithBinarizer:binarizer]; NSError *error; id<ZXReader> reader; if (NSClassFromString(@"ZXMultiFormatReader")) { reader = [NSClassFromString(@"ZXMultiFormatReader") performSelector:@selector(reader)]; } ZXDecodeHints *_hints = [ZXDecodeHints hints]; ZXResult *result = [reader decode:bitmap hints:_hints error:&error]; if (result == nil) { block(kBarcodeFormatQRCode,nil); return; } block(result.barcodeFormat,result.text); } @end