iOS開發中使用CIFilter生成二維碼和條形碼

樑森森發表於2017-06-27

在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;

}



相關文章