是否有可能通過AVFoundation讀取二進制編碼QR碼?與AVFoundation一起閱讀二進制QR碼
我能得到的.type
AVMetadataObjectTypeQRCode
一個AVMetadataMachineReadableCodeObject
對象,然而,這只是有一個stringValue
屬性,這是行不通的,因爲包含在QR碼中的數據不能轉換爲字符串友好的表示。
應該用ZXing嗎?
感謝
是否有可能通過AVFoundation讀取二進制編碼QR碼?與AVFoundation一起閱讀二進制QR碼
我能得到的.type
AVMetadataObjectTypeQRCode
一個AVMetadataMachineReadableCodeObject
對象,然而,這只是有一個stringValue
屬性,這是行不通的,因爲包含在QR碼中的數據不能轉換爲字符串友好的表示。
應該用ZXing嗎?
感謝
的原始數據確實存在在你的AVMetadataMachineReadableCodeObject
,但它通過一個公共的getter是不可用的。
但是,您可以使用KVO來提取它,但Apple可能會拒絕您的應用程序。此外,未來的iOS版本可能會更改其私有API,並且您的代碼可能會失效(因爲硬編碼的私鑰)。
夫特:
readableCodeObject.valueForKeyPath("_internal.basicDescriptor")!["BarcodeRawData"]
目標C
[readableCodeObject valueForKeyPath:@"_internal.basicDescriptor"][@"BarcodeRawData"];
我測試此爲iOS 8和9
這對我有用,但結果是'AnyObject'類型。我可以將它轉換成更可用的類型嗎?對象中包含的數據的類型是什麼? – oelna
在Swift中,您可以使用'readableCodeObject.valueForKeyPath(「_ internal.basicDescriptor」)![「BarcodeRawData」]作爲? NSData'來獲取存儲在'AVMetadataMachineReadableCodeObject'中的NSData。 – alexdmotoc
非常有幫助。但是,我從原始數據中獲得的字節與測試中的參考資料不匹配。應用程序* bctester *例如返回正確的字節,它們與'AVMetadataMachineReadableCodeObject'返回的完全不同。你能爲我指出正確的方向嗎?我想我會把它作爲一個單獨的問題發佈,因爲它不是嚴格地針對這個主題。 – oelna
我能夠通過編碼在所述數據的Base64來解決這個問題二維碼。 這顯然不會工作,如果你不是也生成的QR碼,但可能是人的選擇。
我們遇到了可以存儲在QR碼中的數據的上限,但是通過壓縮數據(我們使用zlib),然後Base64編碼壓縮數據,只要您的數據壓縮到小於75%的原始大小,你會得到一些額外的容量,並可以使用stringValue
屬性來獲取你的數據,你只需要Base64解碼,然後解壓縮以獲取原始數據。
即使您的二進制數據不是非常可壓縮的,只要您可以處理Base64的開銷並仍然處於QR代碼的限制範圍內,這可能是一個可行的選擇,可避免在事實上,AVMetadataMachineReadableCodeObject
似乎想要使用字符串值。
您是否曾經找到過解決方案?我試圖做同樣的 – Johannes