我正在使用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码示例:
有人知道是否有办法使用CIFilter生成更普遍认可的QR码图像?我真的不想再回到使用ZXing了。
谢谢!
答案 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更常见。