这篇文章主要介绍了iOS开发生成二维码图片(附中间带有小图标二维码)的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
生成二维码图片也是项目中常用到的,二维码的扫描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开发生成二维码图片(附中间带有小图标二维码),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
织梦狗教程
本文标题为:iOS开发生成二维码图片(附中间带有小图标二维码)
基础教程推荐
猜你喜欢
- 解决Android Studio突然不显示logcat日志的问题 2023-02-04
- IOS 播放系统提示音使用总结(AudioToolbox) 2023-03-01
- Flutter手势密码的实现示例(附demo) 2023-04-11
- Android开发使用RecyclerView添加点击事件实例详解 2023-06-15
- Android中的webview监听每次URL变化实例 2023-01-23
- iOS开发教程之XLForm的基本使用方法 2023-05-01
- IOS应用内跳转系统设置相关界面的方法 2022-11-20
- android studio按钮监听的5种方法实例详解 2023-01-12
- Flutter绘图组件之CustomPaint使用详解 2023-05-12
- Android多返回栈技术 2023-04-15
