【问题标题】:Various barcode reader free SDK in iOSiOS中的各种条码阅读器免费SDK
【发布时间】:2013-04-03 05:24:10
【问题描述】:

我正在制作一个免费的条形码阅读器应用程序。 我正在寻找免费的 SDK 来解码 Datamatrix、QR、Aztec、UPC、EAN 条码。 我现在已经实现了 ZBar SDK。成功检测到 QR、UPC 和 EAN。 我测试了This link

Zbar

ZXingOBjC

但这些都无法正确检测到 Aztec。 使用 Data Matrix、UPC、EAN 和 QR,我发现 Redlaser 非常有效,但现在它不是免费的。

现在,是否有任何免费的 SDK 可用于检测所有四个条形码而无需付费,因为我想让我的应用在应用商店中免费。

请推荐

P.S 我希望扫描仪与可用的最新 iOS 兼容。

【问题讨论】:

  • 对不起,忘了说它说的是Android / Java(但它在源代码中有一个iOS版本)
  • 我同意它的代码很好,但它不能扫描 Aztec 鳕鱼,这就是我之前卡住的地方。其余的一切它就像一个魅力,但在某个地方我发现阿兹台克人很难。
  • 它说它有 Aztec 支持就在我链接到的页面上。
  • 是的。为了验证,我测试了 android App 并在 this 页面上测试了 Aztec 条形码。抱歉,没有扫描到

标签: ios xcode qr-code barcode-scanner aztec-barcode


【解决方案1】:

通过一些工作,您可以使用 zint 做到这一点。见https://github.com/samlown/zint/blob/master/backend/aztec.c 我在一个应用程序中使用过这个。对不起,我不能分享比这更多的代码: 包括barcode、aztec、common、font、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;
}

【讨论】:

  • 好吧,我知道你不能分享代码,但如果你能指导如何使用阿兹台克代码,它会有所帮助。这些文件看起来很有帮助,但没有示例来了解如何使用。
【解决方案2】:

您可以自定义 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];
}

【讨论】:

  • 我同意你的这个建议,ZBar 与 EAN、UPC 和 QR 配合得非常好,但是当谈到 Datamatrix 和 Eztec 时,我发现它不起作用。您的设置工作正常。Zbar 中没有 Eztec 和 Datamatrix 的符号,所以这没有用。
【解决方案3】:

现在您可以使用 AVFoundation 来扫描条形码,并且支持您在问题中提到的所有条形码类型。

快速教程:Building a Barcode and QR Code Reader in Swift 3 and Xcode 8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多