一、二维码读取
- (IBAction)btn_click:(id)sender {
[self.view endEditing:YES];
self.imageView.image = [self createQRCodeWithStr:self.textField.text];
}
-(UIImage *)createQRCodeWithStr:(NSString *)str{
CIFilter * filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults];
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[filter setValue:data forKey:@"inputMessage"];
CIImage * outPutImage = [filter outputImage];
return [UIImage imageWithCIImage:outPutImage];
}
二、二维码扫描
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (weak, nonatomic) IBOutlet UIView *baseView;
@property (nonatomic,strong) AVCaptureSession * session;
@property (nonatomic,strong) AVCaptureVideoPreviewLayer * preview;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)scan_click:(id)sender {
//摄像头设备
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//设置输入
NSError * error;
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (error) {
NSLog(@"没有摄像头");
return;
}
//设置输出
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc] init];
//使用输出为主线程
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//拍摄会话
AVCaptureSession * session = [[AVCaptureSession alloc] init];
//添加会话的输入输出
[session addInput:input];
[session addOutput:output];
//设置输出格式
[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
//设置预览图册
AVCaptureVideoPreviewLayer * preview = [AVCaptureVideoPreviewLayer layerWithSession:session];
//设置预览图层的属性
[preview setVideoGravity:AVLayerVideoGravityResizeAspectFill];
//设置预览图层的大小
preview.frame = self.baseView.bounds;
[self.baseView.layer addSublayer:preview];
self.preview = preview;
[session startRunning];
self.session = session;
}
//代理方法
//此方法在识别QRCode,并且完成转换后调用
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
[self.session stopRunning];
[self.preview removeFromSuperlayer];
//设置界面显示扫描结果
if (metadataObjects.count > 0) {
AVMetadataMachineReadableCodeObject * obj = metadataObjects[0];
self.textView.text = obj.stringValue;
}
}
@end