QR Code Scanning in ios application

前端 未结 5 1713
借酒劲吻你
借酒劲吻你 2020-12-04 06:37

I need to integrate QR-code reader in app and found a tutorial for it.

I downloaded Z-bar sdk from this link.

Here is what I had done.

In the QRscann

相关标签:
5条回答
  • 2020-12-04 07:12

    use ZBar SDK for BR and QR code scanning in our iPhone application.

    you can find step by step article for this, how to do with sample code as well

    How to use Barcode Scanner (BR and QR) in iPhone Tutorial (using ZBar)

    see how it works

    1. download ZBar SDK from here

    2. add below frameworks in your project

      • AVFoundation.framework
      • CoreGraphics.framework
      • CoreMedia.framework
      • CoreAudio.framework
      • CoreVideo.framework
      • QuartzCore.framework
      • libiconv.dylib
    3. Add the library downloaded libzbar.a of zip in the frameworks

    4. import header in your class and confirm it's delegate

      #import "ZBarSDK.h"

    and

    @interface ViewController : UIViewController <ZBarReaderDelegate>
    

    5.scan image

    - (IBAction)startScanning:(id)sender {
    
        NSLog(@"Scanning..");    
        resultTextView.text = @"Scanning..";
    
        ZBarReaderViewController *codeReader = [ZBarReaderViewController new];
        codeReader.readerDelegate=self;
        codeReader.supportedOrientationsMask = ZBarOrientationMaskAll;
    
        ZBarImageScanner *scanner = codeReader.scanner;
        [scanner setSymbology: ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0];
    
        [self presentViewController:codeReader animated:YES completion:nil];    
    
    }
    

    6.get the result in

    - (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info
    {
        //  get the decode results
        id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
    
        ZBarSymbol *symbol = nil;
        for(symbol in results)
            // just grab the first barcode
            break;
    
        // showing the result on textview
        resultTextView.text = symbol.data;    
    
        resultImageView.image = [info objectForKey: UIImagePickerControllerOriginalImage];
    
        // dismiss the controller 
        [reader dismissViewControllerAnimated:YES completion:nil];
    }
    

    Hope this will help you, also let me know if you find any trouble in this example, Happy to help

    Official Docs

    0 讨论(0)
  • 2020-12-04 07:17

    Try this on iOS 7 and newer.

    To capture QR code:

    - (IBAction)Capture:(id)sender {
    
        isFirst=true;
        _session = [[AVCaptureSession alloc] init];
        _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
        NSError *error = nil;
    
        _input = [AVCaptureDeviceInput deviceInputWithDevice:_device error:&error];
        if (_input) {
            [_session addInput:_input];
        } else {
            NSLog(@"Error: %@", error);
        }
    
        _output = [[AVCaptureMetadataOutput alloc] init];
        [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
        [_session addOutput:_output];
    
        _output.metadataObjectTypes = [_output availableMetadataObjectTypes];
    
        _prevLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
        _prevLayer.frame = self.view.bounds;
        _prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
        [self.view.layer addSublayer:_prevLayer];
    
        [_session startRunning];
    }
    

    To read, use its delegate method:

    - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
    {
        CGRect highlightViewRect = CGRectZero;
        AVMetadataMachineReadableCodeObject *barCodeObject;
        NSString *detectionString = nil;
        NSArray *barCodeTypes = @[AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code,
                AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeCode128Code,
                AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode];
    
        for (AVMetadataObject *metadata in metadataObjects) {
            for (NSString *type in barCodeTypes) {
                if ([metadata.type isEqualToString:type])
                {
                    barCodeObject = (AVMetadataMachineReadableCodeObject *)[_prevLayer transformedMetadataObjectForMetadataObject:(AVMetadataMachineReadableCodeObject *)metadata];
                    highlightViewRect = barCodeObject.bounds;
                    detectionString = [(AVMetadataMachineReadableCodeObject *)metadata stringValue];
                    break;
                }
            }
    
            if (detectionString != nil)
            {
                if (isFirst) {
                isFirst=false;
                _label.text = detectionString;
                break;
               }
            }
            else
                _label.text = @"(none)";
        }
    
        _highlightView.frame = highlightViewRect;
    }
    
    0 讨论(0)
  • 2020-12-04 07:24

    As with the release of iOS7 you no longer need to use an external framework or library. The iOS ecosystem with AVFoundation now fully supports scanning almost every code from QR over EAN to UPC.

    Just have a look at the Tech Note and the AVFoundation programming guide. AVMetadataObjectTypeQRCode is your friend.

    Here is a nice tutorial which shows it step by step: iPhone QR code scan library iOS7

    Just a little example on how to set it up:

    #pragma mark -
    #pragma mark AVFoundationScanSetup
    
    - (void) setupScanner
    {
        self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    
        self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];
    
        self.session = [[AVCaptureSession alloc] init];
    
        self.output = [[AVCaptureMetadataOutput alloc] init];
        [self.session addOutput:self.output];
        [self.session addInput:self.input];
    
        [self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
        self.output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];
    
        self.preview = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
        self.preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
        self.preview.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    
        AVCaptureConnection *con = self.preview.connection;
    
        con.videoOrientation = AVCaptureVideoOrientationLandscapeLeft;
    
        [self.view.layer insertSublayer:self.preview atIndex:0];
    }
    
    0 讨论(0)
  • 2020-12-04 07:33

    You can use my own framework for QRCodeReader.

    https://www.cocoacontrols.com/controls/qrcodereader

    How to use

    1. Embeded Binaries
    2. Drag and drop UIView in your view controller.
    3. Change Class of UIVIew.
    4. Bind your UIView.

    Paste "M1, M2" methods in your view controller (i.e. "ViewController.m")

    "M1" viewDidLoad

    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
        self.title = @"QR Code Reader";
        [qrCodeView setDelegate:self];
        [qrCodeView startReading];
    }
    

    And here the delegate methods: "M2" QRCodeReaderDelegate

    
    #pragma mark - QRCodeReaderDelegate
    - (void)getQRCodeData:(id)qRCodeData {
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"QR Code" message:qRCodeData preferredStyle:UIAlertControllerStyleAlert];
    
        UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Close" style:UIAlertActionStyleDefault handler:nil];
        [alertController addAction:cancel];
    
        UIAlertAction *reScan = [UIAlertAction actionWithTitle:@"Rescan" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            [qrCodeView startReading];
        }];
        [alertController addAction:reScan];
        [self presentViewController:alertController animated:YES completion:nil];
    }
    

    Thanks.

    0 讨论(0)
  • 2020-12-04 07:39

    FIrst import ZXingWidget library from here.

    Try this ,

    - (IBAction)btnScanClicked:(id)sender {
    
        ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];
        QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
        NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];
        [qrcodeReader release];
        widController.readers = readers;
        [readers release];
        NSBundle *mainBundle = [NSBundle mainBundle];
        widController.soundToPlay =
        [NSURL fileURLWithPath:[mainBundle pathForResource:@"beep-beep" ofType:@"aiff"] isDirectory:NO];
        [self presentModalViewController:widController animated:YES];
        [widController release];
    
    
    }
    

    and Delegate

    - (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result {
    
    }
    
    0 讨论(0)
提交回复
热议问题