有没有办法在iOS上生成QR码图像?

有没有任何框架或开源项目,让我生成链接,然后生成一个QR码,并将其附加到iOS客户端应用程序(无服务器代码)的邮件项目?

干杯,罗杰

自iOS 7以来,您可以使用核心图像filter来生成QR图像。 在这里看到最后的提示 :

- (CIImage *)createQRForString:(NSString *)qrString { NSData *stringData = [qrString dataUsingEncoding: NSISOLatin1StringEncoding]; CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; [qrFilter setValue:stringData forKey:@"inputMessage"]; return qrFilter.outputImage; } 

使用Swift 2

 import UIKit import CoreImage func createQRFromString(str: String) -> CIImage? { let stringData = str.dataUsingEncoding(NSUTF8StringEncoding) let filter = CIFilter(name: "CIQRCodeGenerator") filter?.setValue(stringData, forKey: "inputMessage") filter?.setValue("H", forKey: "inputCorrectionLevel") return filter?.outputImage } if let img = createQRFromString("Hello world program created by someone") { let somImage = UIImage(CIImage: img, scale: 1.0, orientation: UIImageOrientation.Down) } 

在这里输入图像说明

Swift 3.0

 import UIKit import CoreImage func createQRFromString(_ str: String) -> CIImage? { let stringData = str.data(using: String.Encoding.utf8) let filter = CIFilter(name: "CIQRCodeGenerator") filter?.setValue(stringData, forKey: "inputMessage") filter?.setValue("H", forKey: "inputCorrectionLevel") if let img = createQRFromString("Hello world program created by someone") { let somImage = UIImage(ciImage: img, scale: 1.0, orientation: UIImageOrientation.down) } return filter?.outputImage } if let img = createQRFromString("Hello world program created by someone") { let somImage = UIImage(ciImage: img, scale: 1.0, orientation: UIImageOrientation.down) } 

对于完全适合我的Obj-C版本,我已经混合了答案和Teja Kumar Bethina:

 NSString *qrString = @"My string to encode"; NSData *stringData = [qrString dataUsingEncoding: NSUTF8StringEncoding]; CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; [qrFilter setValue:stringData forKey:@"inputMessage"]; [qrFilter setValue:@"H" forKey:@"inputCorrectionLevel"]; CIImage *qrImage = qrFilter.outputImage; float scaleX = self.qrImageView.frame.size.width / qrImage.extent.size.width; float scaleY = self.qrImageView.frame.size.height / qrImage.extent.size.height; qrImage = [qrImage imageByApplyingTransform:CGAffineTransformMakeScale(scaleX, scaleY)]; self.qrImageView.image = [UIImage imageWithCIImage:qrImage scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]; 

在Swift 2.0中生成QR图像的代码

 let reqStr = “string to convert as QR code” let data = reqStr.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: false) let filter = CIFilter(name: "CIQRCodeGenerator") filter!.setValue(data, forKey: "inputMessage") let qrImage:CIImage = filter!.outputImage! //qrImageView is a IBOutlet of UIImageView let scaleX = qrImageView.frame.size.width / qrImage.extent.size.width let scaleY = qrImageView.frame.size.height / qrImage.extent.size.height let resultQrImage = qrImage.imageByApplyingTransform(CGAffineTransformMakeScale(scaleX, scaleY)) qrImageView.image = UIImage(CIImage: resultQrImage) 

我使用QR码编码器进行QR生成。 这是非常容易使用。 还有其他一些选项可以生成,例如这个 。

…这将让我生成链接…

首先,您需要find一个短链接服务,例如bit.ly或goo.by ,以缩短链接长度,从而减lessQR码大小。

要自动执行此任务,您必须使用一些Web服务。

…然后生成一个QR码…

ZXing是一个stream行的开源QR码发生器也可用于iOS

如果你不介意使用公共API,这是一个简单的10秒的方法。 http://goqr.me/api

只需填写数据参数,并从响应中加载图像。 干杯。

我为Obj-C创build了一个NSString类别,带着Mike Demidov真棒回答

NString + GGQRCode.h

 #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface NSString (GGQRCode) -(UIImage *)qrCodeImage:(CGFloat)width height:(CGFloat)height; -(UIImage *)qrCodeImage:(CGFloat)width height:(CGFloat)height scale:(CGFloat)scale orientation:(UIImageOrientation)orientation; @end 

NString + GGQRCode.m

 #import "NSString+GGQRCode.h" @implementation NSString (GGQRCode) -(UIImage *)qrCodeImage:(CGFloat)width height:(CGFloat)height { return [self qrCodeImage:width height:height scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]; } -(UIImage *)qrCodeImage:(CGFloat)width height:(CGFloat)height scale:(CGFloat)scale orientation:(UIImageOrientation)orientation { NSData *stringData = [self dataUsingEncoding: NSUTF8StringEncoding]; CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; [qrFilter setValue:stringData forKey:@"inputMessage"]; [qrFilter setValue:@"H" forKey:@"inputCorrectionLevel"]; CIImage *qrImage = qrFilter.outputImage; float scaleX = width / qrImage.extent.size.width; float scaleY = height / qrImage.extent.size.height; qrImage = [qrImage imageByApplyingTransform:CGAffineTransformMakeScale(scaleX, scaleY)]; return [UIImage imageWithCIImage:qrImage scale:scale orientation:orientation]; } @end