1. 二維碼生成
-(UIImage*)getQrImageWithString:(NSString*)string
{
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults];
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
[filter setValue:data forKey:@"inputMessage"]; //通過(guò)kvo方式給一個(gè)字符串,生成二維碼
[filter setValue:@"H" forKey:@"inputCorrectionLevel"];//設(shè)置二維碼的糾錯(cuò)水平,越高糾錯(cuò)水平越高,可以污損的范圍越大
return [UIImage imageWithCIImage:[filter outputImage]];
}
iOS提供了生成二維碼的方法,但是生成的二維碼圖片是CIImage對(duì)象,因此要轉(zhuǎn)成UIImage對(duì)象。另外特別注意的地方是將image用UIImageview顯示的時(shí)候二維碼模糊的問(wèn)題不是二維碼圖片導(dǎo)致的,而是UIimageview渲染的時(shí)候?qū)е碌?,這個(gè)問(wèn)題可以通過(guò)設(shè)置UIImageview的layer屬性的magnificationFilter屬性值為nearest解決。
2.關(guān)于CIFilter
CIFilter是一個(gè)濾鏡,里面有各種濾鏡,創(chuàng)建方法如下
+ (nullable CIFilter *) filterWithName:(NSString *) name
想要知道filter的name 通過(guò)下面的方法獲取
+ (NSArray<NSString *> *)filterNamesInCategory:(nullable NSString *)category
category的值在這個(gè)方法的說(shuō)明文檔里有就是(就是一些常量字符串)
- kCICategoryDistortionEffect //失真效果
- kCICategoryGeometryAdjustment //幾何調(diào)整
- kCICategoryCompositeOperation //復(fù)合操作
- kCICategoryHalftoneEffect //半色調(diào)效果
- kCICategoryColorAdjustment //顏色調(diào)整
- kCICategoryColorEffect //顏色效果
- kCICategoryTransition //翻轉(zhuǎn)
- kCICategoryTileEffect //瓦片效果
- kCICategoryGenerator //生成器
- kCICategoryReduction //削減
- kCICategoryGradient //梯度
- kCICategoryStylize //風(fēng)格
- kCICategorySharpen //銳化
- kCICategoryBlur //模糊
- kCICategoryVideo //視頻
- kCICategoryStillImage //靜態(tài)圖片
- kCICategoryInterlaced //交叉
- kCICategoryNonSquarePixels //非方形像素
- kCICategoryHighDynamicRange //高動(dòng)態(tài)范圍
- kCICategoryBuiltIn //內(nèi)建
- kCICategoryFilterGenerator //濾鏡生成器
調(diào)用方法
NSLog(@"catogerys====%@",[CIFilter filterNamesInCategory:kCICategoryGenerator]);
打印結(jié)果為
catogerys====(
CIAttributedTextImageGenerator,
CIAztecCodeGenerator,
CIBarcodeGenerator,
CICheckerboardGenerator,
CICode128BarcodeGenerator,
CIConstantColorGenerator,
CILenticularHaloGenerator,
CIMeshGenerator,
CIPDF417BarcodeGenerator,
CIQRCodeGenerator,
CIRandomGenerator,
CIStarShineGenerator,
CIStripesGenerator,
CISunbeamsGenerator,
CITextImageGenerator
)
獲取到濾鏡的名字之后可以
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; //生成filter實(shí)例
CIfilter的屬性設(shè)置主要是通過(guò)kvc實(shí)現(xiàn),屬性名的獲取可以通過(guò)只讀屬性inputKeys和outputKeys獲取。