iOS生成的QR码在其他平台上无法识别

时间:2014-10-02 20:24:47

标签: ios qr-code cifilter

我正在使用CIFilter提供的CIQRCodeGenerator过滤器生成QR码图像。生成的图像很好,当它显示时,我可以使用AVCaptureSession读取图像。但是,当我尝试使用不同的平台(Android,BlackBerry,iOS 6)扫描QR码时,它无法识别图像。根据Apple的文档,生成的图像符合ISO / IEC 18004:2006标准。问题是我需要符合ISO 18004:2000的标准吗?

以下是我用来生成图片的代码:

NSData *stringData = [stringToEncode dataUsingEncoding:NSISOLatin1StringEncoding];

CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

[qrFilter setValue:stringData forKey:@"inputMessage"];
[qrFilter setValue:@"M" forKey:@"inputCorrectionLevel"];

CIImage *qrImage = qrFilter.outputImage;

return [UIImage squareUIImageFromCIImage:qrImage withSize:size];

以下是QR码示例:

sample QR code

有人知道是否有办法使用CIFilter生成更普遍认可的QR码图像?我真的不想再回到使用ZXing了。

谢谢!

2 个答案:

答案 0 :(得分:4)

我不确定这个微小的变化是否会产生影响,但这是我最近项目中的一个片段,该片段生成的QR码在一秒钟内成功从iPad相机扫描:

 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

[filter setDefaults];

NSData *data = [accountNumber dataUsingEncoding:NSUTF8StringEncoding];
[filter setValue:data forKey:@"inputMessage"];

CIImage *outputImage = [filter outputImage];

CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgImage = [context createCGImage:outputImage
                                   fromRect:[outputImage extent]];

UIImage *barcode = [UIImage imageWithCGImage:cgImage
                                     scale:1.
                               orientation:UIImageOrientationUp];

// EDIT: 
CFRelease(cgImage);

答案 1 :(得分:1)

您使用的是ISO-8859-1字符集,但不同的QR码阅读器会假设字符编码有所不同,具体取决于他们遵循的标准版本。 UTF-8似乎比ISO-8859-1更常见。