生成动态二维码
因为最近遇到需要一个生成二维码的功能,于是我就接触了一下,现将我实现的步骤分享一下。
首先需要再网上下载一个生成二维码的三方库 qrencode ,点击二维码生成库下载。里面有提供生成二维码的API,返回 QRcode。
注:string:需要编码的字符串内容;version:版本(大小等级1~40);level:容错等级;hint:二维码模式。
实现代码:
新建一个 #import "UIImage+QRCodeGenerator.h";
在 .m 文件里实现
+(UIImage *)QRCodeGenerator:(NSString *)data andQuietZone (NSInteger)iQuietZone andSize:(NSInteger)iSize
{
UIImage *ret = nil;
QRcode *qr = QRcode_encodeString([data UIT8String]),0,QR_ECLEVEL_M,QR_MODE_8,1);
NSInteger logQRSize = qr->width;
NSInteger phyQRSize = logQRSize + (2 * iQuietZone);
NSInteger scale = iSize / phyQRSize;
NSInteger imgSize = phyQRSize * scale;
if ( scale < 1 )
scale = 1;
{
UIGraphicsBeginImageContext(CGSizeMake(imgSize,imgSize));
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect bounds = CGRectMake(0,0,imgSize,imgSize);
CGContextSetFillColorWithColor(ctx,[UIColor whiteColor].CGColor);
CGContextFillRect(ctx,bounds);
// set any 'dark' colour pixels
{
int x,y;
CGContextSetFillColorWithColor(ctx,[UIColor blackColor].CGColor);
for ( y=0 ; ydata[(y*logQRSize)+x] & 1 )
CGContextFillRect(ctx,CGRectMake((iQuietZone+x)*scale, (iQuietZone+y)*scale,scale,scale));
}
// generate the UIImage
CGImageRef imgRef = CGBitmapContextCreateImage(ctx);
ret = [UIImage imageWithCGImage:imgRef];
CGImageRelease(imgRef);
UIGraphicsEndImageContext();
}
QRcode_free(qr);
return ret;
}
}
结果: