我正在使用 CIFilter 提供的 CIQRCodeGenerator 过滤器生成二维码图像。图像生成良好,显示时我可以使用 AVCaptureSession 读取图像。但是,当我尝试使用不同的平台(Android、BlackBerry、iOS 6)扫描二维码时,它无法识别图像。根据 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];
这是一个示例二维码:
有谁知道有没有一种方法可以使用CIFilter生成更普遍认可的QR码图像?我真的不想回去使用 ZXing。
谢谢!
最佳答案
我不确定微小的变化是否会产生影响,但这是我最近项目中的一个片段,它生成了一个二维码,该二维码在不到一秒的时间内从 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);
关于iOS 生成的二维码在其他平台无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26169063/