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

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

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

{

    if (!info) {

        return nil;

    }

    

    NSData *strData = [info dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];

    //创建二维码滤镜

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

    [qrFilter setValue:strData forKey:@"inputMessage"];

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

    CIImage *qrImage = qrFilter.outputImage;

    //颜色滤镜

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

    [colorFilter setDefaults];

    [colorFilter setValue:qrImage forKey: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 = [UIImage imageWithCIImage:[colorImage imageByApplyingTransform:CGAffineTransformMakeScale(scale, scale)]];

    return codeImage;

}

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

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

{

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

    NSData *data = [info dataUsingEncoding:NSUTF8StringEncoding];

    

    // 2.创建条形码滤镜

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

    

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

    [filter setDefaults];

    

    // 4.设置滤镜inputMessage数据

    [filter setValue:data forKey:@"inputMessage"];

    

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

    CIImage *urlImage = [filter outputImage];

    

    // 6.CIImage 转换为UIImage

    UIImage *image = [UIImage imageWithCIImage:urlImage];

    

    return image;

}



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值