Нам было предложено приложение для iOS, которое распознает штрих-коды (возможными типами являются code128, code93, code39) , и после обнаружения нам необходимо воссоздать изображение и показать штрих-код на главном экране.
Для обнаружения штрих-кода мы используем AVCaptureSession
framework, для генерации изображения мы используем CoreImage
.
Я могу определить строковые значения штрих-кодов, но получаю ноль при попытке получить поле CIBarcodeDescriptor
, поэтому я не могу передать эту информацию в раздел CoreImage.
Вот мой код
Обнаружение делегата штрих-кода
public func scannerDelegate(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject],from connection: AVCaptureConnection){
if let metadataObject = metadataObjects.first{
guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else{
return
}
//barcode String id
guard let barcodeStringValue = readableObject.stringValue else{
return
}
//readableObject.descriptor
guard let descriptor = readableObject.descriptor else{
return
}
//Pass parameters to the caller and stop Capture Session
}
}
Для создания изображения штрих-кода
let filterName = descriptor.rawValue
guard let data = barcodeStringValue.data(using: .ascii),
let filter = CIFilter(name: filterName) else {
return nil
}
filter.setValue(data, forKey: "inputMessage")
guard let image = filter.outputImage else {
return nil
}
Так что я не могу передать параметр filterName в классе CIFilter
, я протестировал это решение для QRCode, и оно отлично работает. Можно ли добиться того же результата со штрих-кодами? Или я должен использовать внешнюю библиотеку, чтобы сделать работу?