2014-10-02 63 views
0

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

这里是我使用来产生图像的代码:

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。

谢谢!

+0

QR代码是QR代码...这是一个标准。 – ceejayoz 2014-10-02 20:29:29

+0

@ceejayoz这是一个标准,但有不同的文件覆盖不同的实现。 ISO/IEC 18004:2000定义了QR码模型1和2.ISO/IEC 18004:2006定义了QR码2005符号,QR码模型2的扩展(取自http://en.wikipedia.org/wiki/QR_code) 。 – mcsheffrey 2014-10-02 20:41:38

回答

4

我不知道,如果稍有变化有差别,但这里是从我最近的一个项目,其产生从iPad摄像头下的第二成功扫描的QR代码片段:

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); 
+0

这样做!对setDefaults的调用似乎没有做任何事情(我期望的),但用CIContext创建CGImageRef的中间步骤以某种方式解决了问题。谢谢! – mcsheffrey 2014-10-03 00:25:08

+0

此代码泄漏内存。不要忘记释放'CGImageRef'。 – 2014-10-03 05:34:05

+0

没问题@mcsheffrey :)修正答案释放我的'CGImageRef' – Chris 2014-10-03 14:11:05

1

您正在使用ISO-8859-1字符集,但不同的QR码阅读器会根据他们所遵循的标准版本采用不同的字符编码方式。 UTF-8似乎比ISO-8859-1更常见。

+0

是的,我最初使用的是UTF-8编码,它不能工作,所以我将它切换到NSISOLatin1StringEncoding,因为这是Apple推荐的CIQRCodeGenerator文档。我认为UTF-8可能最适合在这里使用,但这不是我遇到的问题的原因。谢谢! – mcsheffrey 2014-10-03 00:28:28