iOS开发-生成二维码图片附中间带有小图标二维码(QRCode)
Posted 小K’s Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发-生成二维码图片附中间带有小图标二维码(QRCode)相关的知识,希望对你有一定的参考价值。
生成二维码图片也是项目中常用到的,二维码的扫描Git上有很多好用的,这里主要说下二维码的生成
1.普通二维码
1.1 方法
/**
生成二维码
QRStering:字符串
imageFloat:二维码图片大小
*/
+ (UIImage *)createQRCodeWithString:(NSString *)QRStering withImgSize:(CGFloat)imageFloat;
1.2 方法实现
/**
生成二维码
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 方法
/**
生成二维码(中间有小图片)
QRStering:字符串
centerImage:二维码中间的image对象
*/
+ (UIImage *)createImgQRCodeWithString:(NSString *)QRString centerImage:(UIImage *)centerImage;
2.2 方法实现
/**
生成二维码(中间有小图片)
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;
}
附加方法
/** 将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开发-生成二维码图片附中间带有小图标二维码(QRCode)的主要内容,如果未能解决你的问题,请参考以下文章