2013-04-03 33 views
1

我正在製作一款免費的條形碼閱讀器應用程序。 我正在尋找免費的SDK來解碼 Datamatrix,QR,Aztec,UPC,EAN條碼。 我已經按照現在實現了ZBar SDK。它能夠成功檢測QR,UPC和EAN。 我測試This linkiOS中的各種條形碼閱讀器免費SDK

Zbar

ZXingOBjC

但這些都不是能夠正確檢測阿茲臺克人。 隨着Data Matrix,UPC,EAN和QR我發現Redlaser非常有效,但現在它不是免費的。

現在,有沒有免費的SDK可用於檢測所有四個條形碼而無需付費,因爲我想讓應用程序在應用商店免費。

請建議

P.S我想獲得最新的iOS掃描儀的兼容性。

+1

https://code.google.com/p/zxing/斑馬線? – borrrden

+0

對不起,忘記提及它說的是Android/Java(但它有一個iOS版本的源碼) – borrrden

+0

我同意它的一個很好的代碼,但它沒有掃描阿茲特克鱈魚,那是我之前陷入困境的地方。爲了休息一切,它的作品就像一個魅力,但我發現阿茲臺克人很難找到它。 – xrnd

回答

1

通過一些工作,你可以使用zint來做到這一點。請參閱https://github.com/samlown/zint/blob/master/backend/aztec.c 我已經在應用程序中使用過此功能。對不起,我不是不能超過這個分享更多的代碼: 包括條碼,阿茲臺克,常見,字體,GS1,RS和BMP類 然後把下面的代碼在一個單獨的類

void dataProviderReleased (void *info, const void *data, size_t size) { 
    struct barcode_symbol *my_symbol = info; 
    Barcode_Delete(my_symbol); 
} 

+ (UIImage *)aztecBarcodeImageFromString:(NSString *)s scale:(CGFloat)scale { 
    UIImage *image = nil; 
    int errorCode = 0; 
    struct barcode_symbol *my_symbol; 

    if (s == nil) { 
     return nil; 
    } 

    unsigned char *unicodeCharPtr = (unsigned char *)[s cStringUsingEncoding:NSUTF8StringEncoding]; 

    LogInfo(@"Creating barcode image for string: %@", s); 

    my_symbol = Barcode_Create(); 

    my_symbol->output_options = 0; 

    //my_symbol->output_options = BARCODE_BOX; //For a box around the bar code 
    my_symbol->scale = scale; 
    my_symbol->symbology = BARCODE_AZTEC; 

    my_symbol->input_mode = UNICODE_MODE; 

    errorCode = Barcode_Encode(my_symbol, unicodeCharPtr, 0); 

    if (errorCode == 0) { 
     errorCode = Barcode_Buffer(my_symbol, 0); 

     if (errorCode == 0) { 

      int numberOfComponents = 3; 
      long imgSizePerRow = numberOfComponents * my_symbol->bitmap_width; 
      long imgSize = imgSizePerRow * my_symbol->bitmap_height; 

      CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

      //The dataProviderReleased method is responsible for deallocating the ZBarCode with the corresponding image data 
      CGDataProviderRef providerRef = CGDataProviderCreateWithData(my_symbol, my_symbol->bitmap, imgSize, dataProviderReleased); 

      CGImageRef imageRef = CGImageCreate(my_symbol->bitmap_width, my_symbol->bitmap_height, 8, numberOfComponents * 8, 
               imgSizePerRow, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaNone, 
               providerRef, NULL, NO, kCGRenderingIntentDefault); 

      image = [UIImage imageWithCGImage:imageRef]; 

      CGColorSpaceRelease(colorSpace); 
      CGDataProviderRelease(providerRef); 
      CGImageRelease(imageRef); 
     } else { 
      LogWarn(@"Could not buffer barcode, error=%d", errorCode); 
      Barcode_Delete(my_symbol); 
     } 

    } else { 
     LogWarn(@"Could not encode barcode, error=%d", errorCode); 
     Barcode_Delete(my_symbol); 
    } 

    return image; 
} 
+0

那麼我明白,你不能共享代碼,但它會幫助,如果你可以指導如何使用阿茲特克代碼。這些文件看起來很有幫助,但沒有理解如何使用的例子。 – xrnd

+0

我給我的awnser添加了一段代碼 –

1

您掃描定製ZBar掃描儀喜歡設置更多這樣的符號系列

-(void)scanProductBarCode 
{ 
    ZBarReaderViewController *reader = [ZBarReaderViewController new]; 
    reader.readerDelegate = self; 

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
     reader.supportedOrientationsMask = ZBarOrientationMaskLandscape; 
    else 
     reader.supportedOrientationsMask = ZBarOrientationMaskPortrait; 

    ZBarImageScanner *scanner = reader.scanner; 
    [scanner setSymbology: ZBAR_UPCA config: ZBAR_CFG_ENABLE to: 1]; 
    [scanner setSymbology: ZBAR_CODE39 config: ZBAR_CFG_ADD_CHECK to: 0]; 
    [scanner setSymbology:ZBAR_QRCODE config:ZBAR_CFG_ADD_CHECK to:1]; 
    [scanner setSymbology:ZBAR_EAN13 config:ZBAR_CFG_ADD_CHECK to:1]; 

    [self presentModalViewController:reader animated:YES]; 
} 

只是試試它可能會幫助你。

+0

我同意你對這個建議的看法,ZBar在EAN,UPC和QR方面的工作非常棒,但是當談到Datamatrix和Eztec時,我沒有發現它的工作原理。你的設置工作正常。在Zbar中沒有Eztec和Datamatrix的符號,所以這沒有用。 – xrnd