iOS开发中使用CIFilter生成二维码和条形码

来源:互联网 发布:网络小游戏在线玩 编辑:程序博客网 时间:2024/06/12 01:37

在iOS7之后我们可以使用苹果自带的CIFilter这个类生成二维码,我们可以通过为UIImage这个类添加一个分类来实现该功能。代码:

+ (UIImage *)qrCodeImageWithInfo:(NSString *)info  width:(CGFloat)width

{

    if (!info) {

        returnnil;

    }

    

    NSData *strData = [infodataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:NO];

    //创建二维码滤镜

    CIFilter *qrFilter = [CIFilterfilterWithName:@"CIQRCodeGenerator"];

    [qrFilter setValue:strDataforKey:@"inputMessage"];

    [qrFilter setValue:@"H"forKey:@"inputCorrectionLevel"];

    CIImage *qrImage = qrFilter.outputImage;

    //颜色滤镜

    CIFilter *colorFilter = [CIFilterfilterWithName:@"CIFalseColor"];

    [colorFilter setDefaults];

    [colorFilter setValue:qrImageforKey:kCIInputImageKey];

//    [colorFilter setValue:[CIColor colorWithRed:0 green:0 blue:0] forKey:@"inputColor0"];

    

//    ![Uploading 1A4978EE-427F-4804-B536-1D5C330A0578_306160.png . . .][colorFilter setValue:[CIColor colorWithRed:1 green:1 blue:1] forKey:@"inputColor1"];

    CIImage *colorImage = colorFilter.outputImage;

    //返回二维码

    CGFloat scale = width/31;

    UIImage *codeImage = [UIImageimageWithCIImage:[colorImageimageByApplyingTransform:CGAffineTransformMakeScale(scale, scale)]];

    return codeImage;

}

在iOS8之后我们还可以使用CIFilter这个类来生成条形码,我们同样可以通过为UIImage这个类添加分类的方法来实现该功能。代码:

+ (UIImage *)barCodeImageWithInfo:(NSString *)info

{

    // 1.将字符串转换成NSData

    NSData *data = [infodataUsingEncoding:NSUTF8StringEncoding];

    

    // 2.创建条形码滤镜

    CIFilter *filter = [CIFilterfilterWithName:@"CICode128BarcodeGenerator"];

    

    // 3.恢复滤镜的默认属性

    [filter setDefaults];

    

    // 4.设置滤镜inputMessage数据

    [filter setValue:dataforKey:@"inputMessage"];

    

    // 5.获得滤镜输出的图像

    CIImage *urlImage = [filteroutputImage];

    

    // 6.CIImage转换为UIImage

    UIImage *image = [UIImageimageWithCIImage:urlImage];

    

    return image;

}