iOS生成二维码与条形码

2016-01-23  本文已影响1587人  _源计划

*************************具体方法***************************

- (UIImage *)generateQRCode:(NSString *)code width:(CGFloat)width height:(CGFloat)height {

// 生成条形码图片

CIImage *qrcodeImage;

NSData *data = [code dataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:false];

/*dataUsingEncoding可以替换为其他形式,其枚举为:

typedef NSUInteger NSStringEncoding;

NS_ENUM(NSStringEncoding) {

NSASCIIStringEncoding = 1, /* 0..127 only */

NSNEXTSTEPStringEncoding = 2,

NSJapaneseEUCStringEncoding = 3,

NSUTF8StringEncoding = 4,

NSISOLatin1StringEncoding = 5,

NSSymbolStringEncoding = 6,

NSNonLossyASCIIStringEncoding = 7,

NSShiftJISStringEncoding = 8,          /* kCFStringEncodingDOSJapanese */

NSISOLatin2StringEncoding = 9,

NSUnicodeStringEncoding = 10,

NSWindowsCP1251StringEncoding = 11,    /* Cyrillic; same as AdobeStandardCyrillic */

NSWindowsCP1252StringEncoding = 12,    /* WinLatin1 */

NSWindowsCP1253StringEncoding = 13,    /* Greek */

NSWindowsCP1254StringEncoding = 14,    /* Turkish */

NSWindowsCP1250StringEncoding = 15,    /* WinLatin2 */

NSISO2022JPStringEncoding = 21,        /* ISO 2022 Japanese encoding for e-mail */

NSMacOSRomanStringEncoding = 30,

NSUTF16StringEncoding = NSUnicodeStringEncoding,      /* An alias for NSUnicodeStringEncoding */

NSUTF16BigEndianStringEncoding = 0x90000100,          /* NSUTF16StringEncoding encoding with explicit endianness specified */

NSUTF16LittleEndianStringEncoding = 0x94000100,      /* NSUTF16StringEncoding encoding with explicit endianness specified */

NSUTF32StringEncoding = 0x8c000100,

NSUTF32BigEndianStringEncoding = 0x98000100,          /* NSUTF32StringEncoding encoding with explicit endianness specified */

NSUTF32LittleEndianStringEncoding = 0x9c000100        /* NSUTF32StringEncoding encoding with explicit endianness specified */

};

二维码生成时,此处也可以替换*/

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

[filter setValue:data forKey:@"inputMessage"];

[filter setValue:@"H" forKey:@"inputCorrectionLevel"];

qrcodeImage = [filter outputImage];

// 消除模糊

CGFloat scaleX = width / qrcodeImage.extent.size.width; // extent 返回图片的frame

CGFloat scaleY = height / qrcodeImage.extent.size.height;

CIImage *transformedImage = [qrcodeImage imageByApplyingTransform:CGAffineTransformScale(CGAffineTransformIdentity, scaleX, scaleY)];

return [UIImage imageWithCIImage:transformedImage];

}

- (UIImage *)generateBarCode:(NSString *)code width:(CGFloat)width height:(CGFloat)height {

// 生成二维码图片

CIImage *barcodeImage;

NSData *data = [code dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:false];

CIFilter *filter = [CIFilter filterWithName:@"CICode128BarcodeGenerator"];

[filter setValue:data forKey:@"inputMessage"];

barcodeImage = [filter outputImage];

// 消除模糊

CGFloat scaleX = width / barcodeImage.extent.size.width; // extent 返回图片的frame

CGFloat scaleY = height / barcodeImage.extent.size.height;

CIImage *transformedImage = [barcodeImage imageByApplyingTransform:CGAffineTransformScale(CGAffineTransformIdentity, scaleX, scaleY)];

return [UIImage imageWithCIImage:transformedImage];

}


**********************使用方法******************************

UIImageView *txmImage=[[UIImageView alloc]init];

txmImage.frame=CGRectMake(10, 10, WIDTH-20, 60);

txmImage.image=[self generateBarCode:@"tiaoxingma" width:txmImage.frame.size.width height:txmImage.frame.size.height];

[self.view addSubview:txmImage];

UIImageView *ewmImage=[[UIImageView alloc]init];

ewmImage.frame=CGRectMake(WIDTH/4, 80, WIDTH/2, WIDTH/2);

ewmImage.image=[self generateQRCode:@"erweima" width:ewmImage.frame.size.width height:ewmImage.frame.size.height];

[self.view addSubview:ewmImage];

上一篇下一篇

猜你喜欢

热点阅读