美文网首页iOS卖瓜大队
iOS 使用滤镜工具生成二维码

iOS 使用滤镜工具生成二维码

作者: BiBiMan | 来源:发表于2020-08-07 12:50 被阅读0次

    最近手上的项目要添加扫码功能,用的阿里第三方的扫码工具,在调试过程中突然心血来潮想到巩固下二维码生成的技术代码,所以下面我们来使用原生的滤镜工具生成二维码。

    首先引入CoreImage库

    #import <CoreImage/CoreImage.h>

    生成二维码需要使用到库中的CIFilter类(滤镜工具类),CIFilter可以生成除二维码以外的其他图形码,包括条形码、PDF等。

    根据需要获取生成器所支持的图形列表:

    NSArray *filterNames = [CIFilter filterNamesInCategory:kCICategoryGenerator];

    NSLog(@"名称列表:%@",filterNames);

    这里打印的日志如下:

    名称列表:(

        CIAttributedTextImageGenerator,

        CIAztecCodeGenerator,

        CIBarcodeGenerator,

        CICheckerboardGenerator,

        CICode128BarcodeGenerator,

        CIConstantColorGenerator,

        CILenticularHaloGenerator,

        CIMeshGenerator,

        CIPDF417BarcodeGenerator,

        CIQRCodeGenerator,

        CIRandomGenerator,

        CIRoundedRectangleGenerator,

        CIStarShineGenerator,

        CIStripesGenerator,

        CISunbeamsGenerator,

        CITextImageGenerator

    )

    CIQRCodeGenerator才是生成二维码的所需要的。

    然后可以编写核心代码,生成需要的二维码:

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

    [filter setDefaults];

    //这里是二维码信息

    NSString*contentString =@"这里是二维码信息";

    NSData *contentData = [contentString dataUsingEncoding:NSUTF8StringEncoding];

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

    CIImage*outputImg = [filter outputImage];

    UIImage *img = [UIImage imageWithCIImage:outputImg];//模糊的二维码图形

    到此需要的二维码图片生成完毕,但生成的二维码图片过于模糊,所以需要进一步处理使图片更清晰。

        //图片大小
        CGSize size = CGSizeMake(200, 200);

        CGRectextent =CGRectIntegral(outputImg.extent);

        CGFloat scale = MIN(size.width/CGRectGetWidth(extent), size.height/CGRectGetHeight(extent));

        //创建bitmap;

        size_twidth =CGRectGetWidth(extent) * scale;

        size_theight =CGRectGetHeight(extent) * scale;

        CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();

        CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);

        CIContext *context = [CIContext contextWithOptions:nil];

        CGImageRefbitmapImage = [context createCGImage:outputImg fromRect:extent];

        CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);

        CGContextScaleCTM(bitmapRef, scale, scale);

        CGContextDrawImage(bitmapRef, extent, bitmapImage);

        //保存bitmap到图片

        CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);

        CGContextRelease(bitmapRef);

        CGImageRelease(bitmapImage);

        UIImage *img = [UIImage imageWithCGImage:scaledImage];//清晰的二维码图形

    最后得到的就是清晰的二维码图片。

    相关文章

      网友评论

        本文标题:iOS 使用滤镜工具生成二维码

        本文链接:https://www.haomeiwen.com/subject/tghfdktx.html