【问题标题】:QRCode generate OFFLINE二维码生成离线
【发布时间】:2011-05-27 22:11:45
【问题描述】:

是否有一个objective-c 库可以让我离线生成二维码? 谢谢

【问题讨论】:

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


【解决方案1】:

见:https://github.com/jverkoey/ObjQREncoder#readme

使用

#import <QREncoder/QREncoder.h>

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

【讨论】:

  • 老兄,你救了我的命。没试过,但看起来很有希望..谢谢伙计!
  • 它似乎也无法对大段文本进行编码,例如大于 35 个字符。我想出了一种对较大文本进行编码的方法,请查看名为 + (UIImage *)encode:(NSString *)str 的函数中的 QREncoder.m。将correctionLevel 更改为QRCorrectionLevelLow 之类的其他名称。在低设置它让我编码更大的文本
  • 回复有点晚,但如果你看一下示例代码,你会发现如何让它不模糊。
【解决方案2】:

在 Mavericks 和 iOS7 中,二维码生成是 Core Image 的一部分。您只需使用 CIQRCodeGenerator 过滤器。在 Github 上,您可以找到为 iOS 实现此功能的 class。我已经修改了这段代码以获得下面的 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];

但此图像通常会比您想要的小得多。我相信二维码中的每个黑点都只是一个像素。不完全是你想要的。要放大图像而不使其模糊,请执行以下操作:

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,请使用 AVFoundation,如 blog 中所述。不幸的是,目前这似乎仅在 iOS7 上受支持。

【讨论】:

    【解决方案3】:

    只是一种生成二维码的简单原生方式:

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

      NSData *stringData = [qrString dataUsingEncoding: NSISOLatin1StringEncoding];

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

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

      返回 qrFilter.outputImage; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多