ZXingObjC is a full Objective-C port of ZXing (“Zebra Crossing”), a Java barcode image processing library. It is designed to be used on both iOS devices and in Mac applications.
The following barcodes are currently supported for both encoding and decoding:
ZXingObjC currently has feature parity with ZXing version 2.0.
Encoding:
NSError* error = nil; ZXMultiFormatWriter* writer = [ZXMultiFormatWriter writer]; ZXBitMatrix* result = [writer encode:@"A string to encode" format:kBarcodeFormatQRCode width:500 height:500 error:&error]; if (result) { CGImageRef image = [[ZXImage imageWithMatrix:result] cgimage]; // This CGImageRef image can be placed in a UIImage, NSImage, or written to a file. } else { NSString* errorMessage = [error localizedDescription]; }
Decoding:
CGImageRef imageToDecode; // Given a CGImage in which we are looking for barcodes ZXLuminanceSource* source = [[[ZXCGImageLuminanceSource alloc] initWithCGImage:imageToDecode] autorelease]; ZXBinaryBitmap* bitmap = [ZXBinaryBitmap binaryBitmapWithBinarizer:[ZXHybridBinarizer binarizerWithSource:source]]; NSError* error = nil; // There are a number of hints we can give to the reader, including // possible formats, allowed lengths, and the string encoding. ZXDecodeHints* hints = [ZXDecodeHints hints]; ZXMultiFormatReader* reader = [ZXMultiFormatReader reader]; ZXResult* result = [reader decode:bitmap hints:hints error:&error]; if (result) { // The coded result as a string. The raw data can be accessed with // result.rawBytes and result.length. NSString* contents = result.text; // The barcode format, such as a QR code or UPC-A ZXBarcodeFormat format = result.barcodeFormat; } else { // Use error to determine why we didn't get a result, such as a barcode // not being found, an invalid checksum, or a format inconsistency. }
ZXingObjC includes several example applications found in “examples” folder:
As a simpler alternative to adding files directly, you can consider using CocoaPods to add ZXingObjC as a dependency.
Download ZXingObjC or clone it from git: git clone git://github.com/TheLevelUp/ZXingObjC.git
.
Drag the ZXingObjC folder onto Xcode. Make sure “Copy items” is checked before clicking “Add”.
Selecting your project in the left sidebar, select your target, and choose the “Build Phases” tab. Under “Link Binary With Libraries”, add the appropriate frameworks for your architecture:
For an iOS app: * AVFoundation.framework * CoreGraphics.framework * CoreMedia.framework * CoreVideo.framework * ImageIO.framework * QuartzCore.framework
For a Mac app: * ApplicationServices.framework * CoreMedia.framework * CoreVideo.framework * QuartzCore.framework * QTKit.framework
#import "ZXingObjC.h"
ZXingObjC is available under the Apache 2.0 license.