好的,我明白了,Read binary QR Code with AVFoundation 可能重复但我会尝试从不同的角度解决这个问题。
我正在尝试在我的 swift
应用程序中扫描条形码(在本例中为 Aztec)。它适用于编码了常规字符串数据的条形码。不过,对于我的应用程序,我需要能够扫描以二进制格式存储数据的某种类型的条形码 ( read more about this on SO )。
遗憾的是,AVMetadataMachineReadableCodeObject
的 stringValue
是(根据 Apple's docs )
The value of this property is an NSString created by decoding the binary payload according to the format of the machine-readable code
所以输出会出现乱码、截断和不可用(这是一个 zlib
编码的数据流)。
我的问题是:除了 stringValue
之外,还有什么方法可以获取这个二进制负载?我可以覆盖 AVMetadataMachineReadableCodeObject
的一部分并添加我自己的 binaryValue
或类似的东西吗?
我愿意尝试任何事情,但我希望它能在本地工作而不用求助于 ZXing
或其他一些库,因为这是一个非常紧凑的项目。如果您知道这与库一起使用,请随时添加评论。
免责声明:我正在用 Swift 编写代码,但我想我也可以设法从 Obj-C 代码中抽象出来,如果您知道的话。
最佳答案
通过 ZXing,我找到了一个解决方案(该解决方案仍在进行中,但我设法使用 libz 成功地膨胀了缩减的内容)。
转到 ZXAztecDecoder.m
并在方法中 + (NSString *)encodedData:(ZXBoolArray *)correctedBits
您可以使用 + (int)readCode:(ZXBoolArray *)rawbits startIndex:(int)startIndex length:(int)length
给出的代码创建unsigned char
.
所以无论我在哪里找到一行代码,试图将字符添加到 NSString
我还填充了 unsigned char
的缓冲区(从 int
转换为 readCode:rawBits:startIndex:length
方法)。
我使用了您发布的有关使用 Python 解析 Deutche Ban 门票的问题中的 Aztec 条形码。我能够膨胀内容和一切。唯一的问题是膨胀对我的铁路公司不起作用......所以我只能弄清楚应该用哪种算法来膨胀以 55 4E
开头的流。或 55 8E
...
祝你好运!我发现你的其他问题很有帮助,非常感谢。
编辑: 一些可能有帮助的代码:https://gist.github.com/johanhar/a421a14bef2f06ee2340
关于ios - 覆盖 AVMetadataMachineReadableCodeObject 的 stringValue 属性或创建输出二进制数据的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34438301/