生成二维码图片也是项目中常用到的,二维码的扫描Git上有很多好用的,这里主要说下二维码的生成
1.普通二维码
1.1 方法
1
2
3
4
5
6
|
/** 生成二维码 QRStering:字符串 imageFloat:二维码图片大小 */ + (UIImage *)createQRCodeWithString:(NSString *)QRStering withImgSize:(CGFloat)imageFloat; |
1.2 方法实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/** 生成二维码 QRStering:字符串 imageFloat:二维码图片大小 */ + (UIImage *)createQRCodeWithString:(NSString *)QRString withImgSize:(CGFloat)imageFloat{ CIFilter *filter = [CIFilter filterWithName:@ "XiaoGuiGe" ]; [filter setDefaults]; NSString *getString = QRString; NSData *dataString = [getString dataUsingEncoding:NSUTF8StringEncoding]; [filter setValue:dataString forKey:@ "inputMessage" ]; ///获取滤镜输出的图像 CIImage *outImage = [filter outputImage]; UIImage *imageV = [self imageWithImageSize:imageFloat withCIIImage:outImage]; //返回二维码图像 return imageV; } |
2.中间带有小图标的二维码
2.1 方法
1
2
3
4
5
6
|
/** 生成二维码(中间有小图片) QRStering:字符串 centerImage:二维码中间的image对象 */ + (UIImage *)createImgQRCodeWithString:(NSString *)QRString centerImage:(UIImage *)centerImage; |
2.2 方法实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/** 生成二维码(中间有小图片) QRStering:所需字符串 centerImage:二维码中间的image对象 */ + (UIImage *)createImgQRCodeWithString:(NSString *)QRString centerImage:(UIImage *)centerImage{ // 创建滤镜对象 CIFilter *filter = [CIFilter filterWithName:@ "XiaoGuiGe" ]; // 恢复滤镜的默认属性 [filter setDefaults]; // 将字符串转换成 NSdata NSData *dataString = [QRString dataUsingEncoding:NSUTF8StringEncoding]; // 设置过滤器的输入值, KVC赋值 [filter setValue:dataString forKey:@ "inputMessage" ]; // 获得滤镜输出的图像 CIImage *outImage = [filter outputImage]; // 图片小于(27,27),我们需要放大 outImage = [outImage imageByApplyingTransform:CGAffineTransformMakeScale( 20 , 20 )]; // 将CIImage类型转成UIImage类型 UIImage *startImage = [UIImage imageWithCIImage:outImage]; // 开启绘图, 获取图形上下文 UIGraphicsBeginImageContext(startImage.size); // 把二维码图片画上去 (这里是以图形上下文, 左上角为(0,0)点 [startImage drawInRect:CGRectMake( 0 , 0 , startImage.size.width, startImage.size.height)]; // 再把小图片画上去 CGFloat icon_imageW = 200 ; CGFloat icon_imageH = icon_imageW; CGFloat icon_imageX = (startImage.size.width - icon_imageW) * 0.5 ; CGFloat icon_imageY = (startImage.size.height - icon_imageH) * 0.5 ; [centerImage drawInRect:CGRectMake(icon_imageX, icon_imageY, icon_imageW, icon_imageH)]; // 获取当前画得的这张图片 UIImage *qrImage = UIGraphicsGetImageFromCurrentImageContext(); // 关闭图形上下文 UIGraphicsEndImageContext(); //返回二维码图像 return qrImage; } |
附加方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/** 将CIImage转换成UIImage 并放大(内部转换使用)*/ + (UIImage *)imageWithImageSize:(CGFloat)size withCIIImage:(CIImage *)ciiImage{ CGRect extent = CGRectIntegral(ciiImage.extent); CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent)); // 1.创建bitmap; size_t width = CGRectGetWidth(extent) * scale; size_t height = CGRectGetHeight(extent) * scale; CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray(); CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8 , 0 , cs, (CGBitmapInfo)kCGImageAlphaNone); CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef bitmapImage = [context createCGImage:ciiImage fromRect:extent]; CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone); CGContextScaleCTM(bitmapRef, scale, scale); CGContextDrawImage(bitmapRef, extent, bitmapImage); // 2.保存bitmap到图片 CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef); CGContextRelease(bitmapRef); CGImageRelease(bitmapImage); return [UIImage imageWithCGImage:scaledImage]; } |
总结
以上所述是小编给大家介绍的iOS开发生成二维码图片(附中间带有小图标二维码),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
原文链接:http://www.cnblogs.com/wangkejia/archive/2017/10/07/7634884.html