【问题标题】:Using AVFoundation to scan PDF417 barcodes使用 AVFoundation 扫描 PDF417 条码
【发布时间】:2013-11-28 01:02:08
【问题描述】:

我有一个使用 iOS 7 中新的 AVFoundation 条形码扫描类的有效 iOS 条形码扫描仪。我可以成功获得一维条形码(例如 UPC 条形码)的字符串表示,但我还需要扫描二维 PDF417 条形码.

我似乎无法弄清楚如何获取存储在 PDF417 条形码中的数据的字符串表示形式(或任何表示形式)。扫描器识别条形码并返回AVMetadataMachineReadableCodeObject,但将 stringValue 消息发送到该对象返回 nil。文档中对该方法的描述说:

该属性的值是根据机器可读代码的格式解码二进制有效负载创建的NSString,如果无法创建字符串表示,则为nil

因此,似乎无法创建字符串表示。没关系……但那我该怎么办?这个类似乎没有任何其他方法可以返回原始数据或有关扫描的条形码的任何其他有用信息。

【问题讨论】:

  • 它是加密的条形码吗? PDF417 常用于驾照,一些州对数据进行加密,因此仅限于官方使用。
  • 我只是在使用免费的在线条形码生成器进行测试,创建简单的字母字符串 PDF417 条形码,但扫描仪不会为其中任何一个返回非零字符串值。

标签: ios objective-c avfoundation barcode-scanner


【解决方案1】:

原始数据确实存在于您的 AVMetadataMachineReadableCodeObject 中,但无法通过公共 getter 获得。

但是,您可以使用 KVO 来提取它,但 Apple 可能会拒绝您的应用。此外,未来的 iOS 版本可能会更改其私有 API,您的代码可能会变得无效(因为硬编码的私钥)。

斯威夫特:

readableCodeObject.valueForKeyPath("_internal.basicDescriptor")!["BarcodeRawData"]

目标-C

[readableCodeObject valueForKeyPath:@"_internal.basicDescriptor"][@"BarcodeRawData"];

我在 iOS 8 和 9 上对此进行了测试。

【讨论】:

  • 我遇到了和@stackunderflow 完全相同的问题。我想知道为什么 Apple 会假设 PDF417 完全由文本数据组成。一些驾驶执照(PDF417 格式)包含 JPEG2000 图像数据。如果我使用stringValue,那么大部分图像数据将丢失,以至于它可能不再是 JPEG2000 格式。
猜你喜欢
  • 1970-01-01
  • 2013-12-16
  • 2015-04-13
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多