Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

QR Code Scanning in ios application

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 QRscannerViewController.m

-(IBAction)StartScan:(id) sender {     ZBarReaderViewController *reader = [ZBarReaderViewController new];      reader.readerDelegate = self;       reader.readerView.torchMode = 0;      ZBarImageScanner *scanner = reader.scanner;     // TODO: (optional) additional reader configuration here      // EXAMPLE: disable rarely used I2/5 to improve performance     [scanner setSymbology: ZBAR_I25      config: ZBAR_CFG_ENABLE       to: 0];       // present and release the controller      [self presentModalViewController: reader        animated: YES];      [reader release];      resultTextView.hidden=NO;  }   - (void) readerControllerDidFailToRead: (ZBarReaderController*) reader                          withRetry: (BOOL) retry{      NSLog(@"the image picker failing to read");   }   - (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info  {        NSLog(@"the image picker is calling successfully %@",info);       // ADD: get the decode results      id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];      ZBarSymbol *symbol = nil;      NSString *hiddenData;       for(symbol in results)        hiddenData=[NSString stringWithString:symbol.data];       NSLog(@"the symbols  is the following %@",symbol.data);       // EXAMPLE: just grab the first barcode      //  break;        // EXAMPLE: do something useful with the barcode data       //resultText.text = symbol.data;       resultTextView.text=symbol.data;          NSLog(@"BARCODE= %@",symbol.data);        NSUserDefaults *storeData=[NSUserDefaults standardUserDefaults];       [storeData setObject:hiddenData forKey:@"CONSUMERID"];       NSLog(@"SYMBOL : %@",hiddenData);       resultTextView.text=hiddenData;      [reader dismissModalViewControllerAnimated: NO];   } 

All needed frameworks were added, so there is no referenced from errors.

When I click the scan button, the ZBarReaderViewController appears well and I hold the alt key and left click the mouse to open the photo library of simulator and all works fine.

What the problem is,

  1. The QR image is not get scanned, ie imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo function is not get called.
  2. The QR image appears larger than its original size.

enter image description here

How to solve this?

Why the image not get scanned?

like image 968
Nazik Avatar asked Apr 23 '13 10:04

Nazik


People also ask

Can iPhone detect QR codes?

You can use Camera or the Code Scanner to scan Quick Response (QR) codes for links to websites, apps, coupons, tickets, and more. The camera automatically detects and highlights a QR code.

How do you scan a QR code with an app?

Step 2: Scan the QR code On your compatible Android phone or tablet, open the built-in camera app. Point the camera at the QR code. Tap the banner that appears on your Android phone or tablet. Follow the instructions on the screen to finish signing in.

Do you need an app to scan a QR code on iPhone?

The latest iOS update on the iPhone and iPad allows users to scan QR codes using only the camera, no app required. Simply open the phone's camera and point it at the QR code. You don't even have to take a picture, just look at it.


2 Answers

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]; } 
like image 148
Alexander Avatar answered Sep 23 '22 13:09

Alexander


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

like image 45
swiftBoy Avatar answered Sep 24 '22 13:09

swiftBoy