二维码生成

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 *)filterNamesInCategory:(nullable NSString *)category
category的值在这个方法的说明文档里有就是(就是一些常量字符串)
  1. kCICategoryDistortionEffect //失真效果
  2. kCICategoryGeometryAdjustment //几何调整
  3. kCICategoryCompositeOperation //复合操作
  4. kCICategoryHalftoneEffect //半色调效果
  5. kCICategoryColorAdjustment //颜色调整
  6. kCICategoryColorEffect //颜色效果
  7. kCICategoryTransition //翻转
  8. kCICategoryTileEffect //瓦片效果
  9. kCICategoryGenerator //生成器
  10. kCICategoryReduction //削减
  11. kCICategoryGradient //梯度
  12. kCICategoryStylize //风格
  13. kCICategorySharpen //锐化
  14. kCICategoryBlur //模糊
  15. kCICategoryVideo //视频
  16. kCICategoryStillImage //静态图片
  17. kCICategoryInterlaced //交叉
  18. kCICategoryNonSquarePixels //非方形像素
  19. kCICategoryHighDynamicRange //高动态范围
  20. kCICategoryBuiltIn //内建
  21. 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获取。

你可能感兴趣的:(二维码生成)