February 25, 2012

อ่าน QR Code บน iOS ด้วย ZBar SDK

สำหรับการเขียนโปรแกรมให้สามารถอ่าน QR code นั้น ผมเคยเขียนเกี่ยวกับการอ่าน QR Code บน iPhone โดยการใช้ Zbar มาแล้วครั้งหนึ่ง แต่ครั้งนั้นการใช้งานและติดตั้งอะไรยังไม่ค่อยสะดวก (มาก) เท่าไหร่นัก และสำหรับคราวนี้ ZBar SDK ซึ่งถูกพัฒนาไปมาก ทำให้เราสามารถนำมาติดตั้งและใช้งานบน iOS App ของเราได้ง่ายขึ้นกว่าเดิมเยอะ

เริ่มจากดาวน์โหลด ZBar SDK (เวอร์ชั่นปัจจุบันคือ 1.2) ได้จากที่นี่เลย Download the ZBar iPhone SDK 1.2 จากนั้นเราจะได้ไฟล์ .dmg ขนาดประมาณ 7.1 MB มา ให้ mount disk image และลากโฟลเดอร์ ZBar SDK ลงไปใน Xcode project ของเรา

ต่อไปก็ link AVFoundation.framework, CoreMedia.framework, CoreVideo.framework, QuartzCore.framework และสุดท้าย libiconv.dylib

วิธีใช้งาน เริ่มจากให้ import header ที่จำเป็นเข้ามาในโปรเจ็คก่อน


#import "ZBarSDK.h"


จากนั้นสร้าง object ของ ZBarReaderViewController และกำหนดค่าต่างๆ ที่จำเป็นตามโค้ดต่อไปนี้


ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
reader.supportedOrientationsMask = ZBarOrientationMaskAll;

ZBarImageScanner *scanner = reader.scanner;

[scanner setSymbology: ZBAR_I25
               config: ZBAR_CFG_ENABLE
                   to: 0];

[self presentModalViewController: reader animated: YES];


วิธีกำหนดค่าและใช้งานแบบอื่นๆ

หลังจากเราสั่งให้แสดง modal view ไปแล้ว โปรแกรมจะเปิดกล้องขึ้นมาพร้อมสแกนภาพ QRCode ให้โดยอัตโนมัติ หลังจากโปรแกรมตรวจเจอ QR Code แล้ว delegate method ที่เราคุ้นเคยในการถ่ายรูปตัวนี้จะทำงาน


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


ซึ่งนอกจาก info จะส่งค่าต่างๆ ที่เกี่ยวกับการถ่ายรูปปกติแล้ว มันยังส่ง object มากับ key พิเศษอีกตัวเพิ่มเข้ามานั่นก็คือ ZBarReaderControllerResults ซึ่ง object ตัวนี้จะเก็บข้อมูลที่ตัว ZBar SDK อ่านออกมาได้


id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results){
    NSLog(@"symbol.data = %@", symbol.data);
}


ที่มา: ZBar iPhone SDK