1. 二维码生成
-(UIImage*)getQrImageWithString:(NSString*)string
{
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults];
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
[filter setValue:data forKey:@"inputMessage"]; //通过kvo方式给一个字符串,生成二维码
[filter setValue:@"H" forKey:@"inputCorrectionLevel"];//设置二维码的纠错水平,越高纠错水平越高,可以污损的范围越大
return [UIImage imageWithCIImage:[filter outputImage]];
}
iOS提供了生成二维码的方法,但是生成的二维码图片是CIImage对象,因此要转成UIImage对象。另外特别注意的地方是将image用UIImageview显示的时候二维码模糊的问题不是二维码图片导致的,而是UIimageview渲染的时候导致的,这个问题可以通过设置UIImageview的layer属性的magnificationFilter属性值为nearest解决。
2.关于CIFilter
CIFilter是一个滤镜,里面有各种滤镜,创建方法如下
+ (nullable CIFilter *) filterWithName:(NSString *) name
想要知道filter的name 通过下面的方法获取
+ (NSArray<NSString *> *)filterNamesInCategory:(nullable NSString *)category
category的值在这个方法的说明文档里有就是(就是一些常量字符串)
- kCICategoryDistortionEffect //失真效果
- kCICategoryGeometryAdjustment //几何调整
- kCICategoryCompositeOperation //复合操作
- kCICategoryHalftoneEffect //半色调效果
- kCICategoryColorAdjustment //颜色调整
- kCICategoryColorEffect //颜色效果
- kCICategoryTransition //翻转
- kCICategoryTileEffect //瓦片效果
- kCICategoryGenerator //生成器
- kCICategoryReduction //削减
- kCICategoryGradient //梯度
- kCICategoryStylize //风格
- kCICategorySharpen //锐化
- kCICategoryBlur //模糊
- kCICategoryVideo //视频
- kCICategoryStillImage //静态图片
- kCICategoryInterlaced //交叉
- kCICategoryNonSquarePixels //非方形像素
- kCICategoryHighDynamicRange //高动态范围
- kCICategoryBuiltIn //内建
- kCICategoryFilterGenerator //滤镜生成器
调用方法
NSLog(@"catogerys====%@",[CIFilter filterNamesInCategory:kCICategoryGenerator]);
打印结果为
catogerys====(
CIAttributedTextImageGenerator,
CIAztecCodeGenerator,
CIBarcodeGenerator,
CICheckerboardGenerator,
CICode128BarcodeGenerator,
CIConstantColorGenerator,
CILenticularHaloGenerator,
CIMeshGenerator,
CIPDF417BarcodeGenerator,
CIQRCodeGenerator,
CIRandomGenerator,
CIStarShineGenerator,
CIStripesGenerator,
CISunbeamsGenerator,
CITextImageGenerator
)
获取到滤镜的名字之后可以
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; //生成filter实例
CIfilter的属性设置主要是通过kvc实现,属性名的获取可以通过只读属性inputKeys和outputKeys获取。
网友评论