我正在尝试使用 AVFoundation 库从条形码类型 PDF417 中读取信息。
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
if let metadataObj = metadataObjects[0] as? AVMetadataMachineReadableCodeObject {
print(metadataObj.stringValue)//prints 0357379329
}
}
在“AVCaptureMetadataOutputObjectsDelegate”中的didOutput方法的执行点,我可以捕获AVMetadataObject及其stringValue;然而 stringValue 没有包含在条形码中的完整信息,它会生成如下内容:
0357379329
当我使用像BlinkId这样的付费应用程序时,我可以看到更多信息。
根据这个主题,我尝试使用“_internal.basicDescriptor”方法:
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
if let metadataObj = metadataObjects[0] as? AVMetadataMachineReadableCodeObject {
if let basic_descriptor = metadataObj.value(forKeyPath: "_internal.basicDescriptor") as? NSObject {
if let barcodeRawData = basic_descriptor.value(forKeyPath: "BarcodeRawData") as? NSData {
let barcode_raw_data_length = barcodeRawData.length
let memory_layout = MemoryLayout<UInt8>.size
let count = barcode_raw_data_length / memory_layout
var array = [UInt8](repeating: 0, count: count)//Array con 1050 elementos. Cada elemento es igual a cero
barcodeRawData.getBytes(&array, length:count * memory_layout)
let data_character = array.reduce("", { $0 + String(format: "%c", $1)})
print(data_character)
}
}
}
}
data_character 打印一个我不知道如何解释的字符串:
ÍH ÕÛ+ÝY-<4mI ËÇ;ÚÖ ÿûJhiòþ ^HT¶î èm½C3&îð
Ü,Feæ»0æ¤öc$¯#m,WÆç4Pá$Ññü0njtYÜ0U¼Çça°'£aR.)9 Êq3uúù7=,~mV ½Q ý;áu½7õÚÚAZÝcJà ëu-Õß/³©îprX×Ijßçól{¡¿ý...
我想知道其中的任何一个:
- 如何获取包含整个信息的 AVMetadataObject stringValue?
- 如何解释使用“_internal.basicDescriptor”生成的字符串?
- 是否有另一种方法可以从 swift 4 中的 pdf417 获取信息?
谢谢!