您的位置:首页 > 移动开发 > IOS开发

iOS原生二维码扫描&libqrencode生成二维码

2016-07-22 17:14 417 查看
一、iOS原生二维码扫描

//开始扫描

- (void)beginScanning

{

    //创建摄像设备

    AVCaptureDevice *device = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeVideo];

    //创建输入流

    AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:nil];

    if (!input) {

        

        return;

    }

    //创建输出流

    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput
alloc] init];

    //设置代理,在主线程中刷新

    [output setMetadataObjectsDelegate:self
queue:dispatch_get_main_queue()];

    //设置有效扫描区域

    CGRect scanCrop = [self
getScanCrop:self.scanWindow.bounds
readerViewBounds:self.view.frame];

    output.rectOfInterest = scanCrop;

    

    //初始化链接对象

    self.session = [[AVCaptureSession
alloc] init];

    //高质量采光率

    [self.session
setSessionPreset:AVCaptureSessionPresetHigh];

    [self.session
addInput:input];

    [self.session
addOutput:output];

    

    //设置扫描的支持的编码格式

    output.metadataObjectTypes =
@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code,
AVMetadataObjectTypeEAN8Code,
AVMetadataObjectTypeCode128Code];

    

    AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer
layerWithSession:_session];

    layer.videoGravity=AVLayerVideoGravityResizeAspectFill;

    layer.frame=self.view.layer.bounds;

    [self.view.layer
insertSublayer:layer atIndex:0];

    

    [self.session
startRunning];

    

    

}

//获取扫描结果

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection
*)connection{

    if (metadataObjects.count>0) {

        [_session
stopRunning];

        AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects
objectAtIndex : 0 ];

        

        UIAlertView *alert = [[UIAlertView
alloc] initWithTitle:@"扫描结果"
message:metadataObject.stringValue
delegate:self
cancelButtonTitle:@"退出"
otherButtonTitles:@"再次扫描",
nil];

        [alert show];

    }

}

二、识别图片中的二维码

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

    //1.获取选择的图片

    UIImage *image = info[UIImagePickerControllerOriginalImage];

    //2.初始化一个监测器

    CIDetector*detector = [CIDetector
detectorOfType:CIDetectorTypeQRCode
context:nil
options:@{
CIDetectorAccuracy : CIDetectorAccuracyHigh
}];

    

    [picker dismissViewControllerAnimated:YES
completion:^{

        //监测到的结果数组

        NSArray *features = [detector
featuresInImage:[CIImage
imageWithCGImage:image.CGImage]];

        if (features.count >=1) {

            /**结果对象 */

            CIQRCodeFeature *feature = [features
objectAtIndex:0];

            NSString *scannedResult = feature.messageString;

            UIAlertView * alertView = [[UIAlertView
alloc]initWithTitle:@"扫描结果"
message:scannedResult delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles:nil,
nil];

            [alertView show];

            

        }

        else{

            UIAlertView * alertView = [[UIAlertView
alloc]initWithTitle:@"提示"
message:@"该图片没有包含一个二维码!"
delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles:nil,
nil];

            [alertView show];

            

        }

        

        

    }];

    

    

}

三、libqrencode生成二维码

//生成二维码信息图片

- (void)createCodeImage

{

    UIImage *image=[UIImage
imageNamed:@"hold2_60x72_"];

    UIImage*tempImage=[QRCodeGenerator
qrImageForString:self.codeInfo.text
imageSize:360
Topimg:image withColor:kRandomColors];

    self.codeImage.image = tempImage;

}

这里只是粘贴处重要代码,如果有需要可以私信我。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息