好的,我明白了,可能是Read binary QR Code with AVFoundation的副本,但我会尝试从不同的角度解决这个问题。
我正在尝试在我的swift
应用中扫描条形码(在本例中为Aztec)。它适用于具有常规字符串数据编码的条形码。但对于我的应用程序,我需要能够扫描以二进制格式存储数据的某种类型的条形码(read more about this on SO)。
遗憾的是,stringValue
AVMetadataMachineReadableCodeObject
是(Apple's docs)
此属性的值是由解码创建的NSString 二进制有效载荷根据机器可读代码的格式
因此输出会出现乱码,截断和无法使用(这是一个zlib
编码的数据流。)
我的问题是:有没有办法获得{strong>二进制有效负载其他stringValue
?我可以覆盖部分AVMetadataMachineReadableCodeObject
并添加我自己的binaryValue
或类似内容。
我愿意尝试任何东西,但是我喜欢这个本地工作而不诉诸ZXing
或其他一些图书馆,因为这是一个非常紧凑的项目。如果您知道这是使用库,请随时添加注释。
免责声明:我在Swift中对此进行编码,但我认为我可以设法从Obj-C代码中抽象出来,如果这就是你所知道的。
答案 0 :(得分:3)
通过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
答案 1 :(得分:0)
事实证明,原始二进制数据确实存在于AVMetadataMachineReadableCodeObject
中,并且可以读入NSData对象,但该方法带有一个catch。
在我的情况下,我试图阅读Aztec条形码,但它似乎适用于任何iOS可以检测到的。这个SO答案有解决方案: Read binary QR Code with AVFoundation