Различный считыватель штрих-кода бесплатно SDK в iOS
Я делаю приложение для чтения штрих-кодов, которое бесплатно. Я ищу бесплатный SDK для декодирования штрих-кодов Datamatrix,QR,Aztec,UPC,EAN. Я реализовал ZBar SDK в соответствии с сейчас. Который успешно обнаруживает QR,UPC и EAN. Я проверил эту ссылку
Но ни один из них не способен правильно определять ацтеков. С помощью Data Matrix,UPC,EAN и QR я нашел Redlaser очень эффективным, но теперь он не бесплатный.
Теперь есть ли бесплатный SDK для обнаружения всех четырех штрих-кодов без оплаты, так как я хочу, чтобы мое приложение оставалось бесплатным в магазине приложений.
Пожалуйста, предложите
PS Я хочу совместимость сканера с последней версией iOS.
3 ответа
С некоторой работой вы могли бы сделать это, используя 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;
}
Вы сканируете, настраиваете ZBar Scanner, как устанавливаете еще несколько символов, как это
-(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];
}
Просто попробуйте это может помочь вам.
В настоящее время вы можете использовать AVFoundation для сканирования штрих-кодов и поддерживает все типы штрих-кодов, которые вы указали в своем вопросе.
Краткое руководство: создание считывателя штрих-кода и QR-кода в Swift 3 и Xcode 8