QRCode生成OFFLINE

时间:2011-05-27 22:11:45

标签: objective-c cocoa-touch ios qr-code

是否有一个objective-c库可以让我离线生成QRCodes? 感谢

3 个答案:

答案 0 :(得分:6)

请参阅:https://github.com/jverkoey/ObjQREncoder#readme

使用

#import <QREncoder/QREncoder.h>

UIImage* image = [QREncoder encode:@"http://www.google.com/"];

答案 1 :(得分:3)

在Mavericks和iOS7中,QR代码生成是Core Image的一部分。您只需使用CIQRCodeGenerator过滤器即可。在Github上,你可以找到一个class,它可以为iOS实现这个功能。我已修改此代码以获取下面的OS X兼容代码:

NSString *website = @"http://stackoverflow.com/";
NSData *urlAsData = [website dataUsingEncoding:NSUTF8StringEncoding];

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

[filter setValue: urlAsData forKey:@"inputMessage"];
[filter setValue:@"M" forKey:@"inputCorrectionLevel"];

CIImage *outputImage = [filter valueForKey:kCIOutputImageKey];

如果你想绘制CIImage,有几种可能性。您可以像这样创建NSImage

CIContext *context = [[NSGraphicsContext currentContext] CIContext];
CGImageRef cgImage = [context createCGImage:outputImage
                                   fromRect:[outputImage extent]];

NSImage *image = [[NSImage alloc] initWithCGImage:cgImage size:NSZeroSize];

但是这个图像通常比你想要的要小得多。我相信QR码中的每个黑点都只是一个像素。不是你想要的。要在不模糊的情况下放大图像,请执行以下操作:

NSSize largeSize = NSMakeSize(image.size.width * 10, image.size.height * 10);

[image setScalesWhenResized:YES];
NSImage *largeImage = [[NSImage alloc] initWithSize:largeSize];
[largeImage lockFocus];
[image setSize:largeSize];
[[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationNone];
[image drawAtPoint:NSZeroPoint fromRect:CGRectMake(0, 0, largeSize.width, largeSize.height) operation:NSCompositeCopy fraction:1.0];
[largeImage unlockFocus];

largeImage是您可以显示的结果图像。

如果您要解码QR,请按照此blog中的说明使用AVFoundation。不幸的是,这似乎只在iOS7上得到支持。

答案 2 :(得分:0)

只是一种生成QR码的简单本地方式:

  • (CIImage *)createQRForString:(NSString *)qrString {

    NSData * stringData = [qrString dataUsingEncoding:NSISOLatin1StringEncoding];

    CIFilter * qrFilter = [CIFilter filterWithName:@“CIQRCodeGenerator”];

    [qrFilter setValue:stringData forKey:@“inputMessage”];

    返回qrFilter.outputImage; }