iOSはURLに基づいてQRコードを生成し、真ん中にアイコンを追加します

UIImage *getNewQRCodeImageFromString(NSString *url, CIColor *frontColor, CIColor *backColor){
  
    // 1. 创建一个二维码滤镜实例(CIFilter)
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    // 滤镜恢复默认设置
    [filter setDefaults];
    
    // 2. 给滤镜添加数据
    NSData *data = [url dataUsingEncoding:NSUTF8StringEncoding];
    // 使用KVC的方式给filter赋值
    [filter setValue:data forKeyPath:@"inputMessage"];
    //二维码容错级别选择H,容错级别:L(7%)、M(15%)、Q(25%)、H(30%)
    [filter setValue:@"H" forKey:@"inputCorrectionLevel"];
    
    // 3. 生成二维码
    CIImage *qrImage = [filter outputImage];
    
    // 4. 增加颜色滤镜
    CIFilter *colorFilter = [CIFilter filterWithName:@"CIFalseColor"];
    [colorFilter setDefaults];
    [colorFilter setValue:qrImage forKey:kCIInputImageKey];
    // 设定前景色
    [colorFilter setValue:frontColor forKey:@"inputColor0"];
    // 设定背景色
    [colorFilter setValue:backColor forKey:@"inputColor1"];
    CIImage *colorImage = colorFilter.outputImage;
    
    // 5. 生成的二维码太过模糊,需要优化二维码的显示清晰度
    //方法一
    CGFloat width = 300;
    CGFloat height = 300;
    CGFloat scale = width/colorImage.extent.size.width;
    UIImage *finalQRImage = [UIImage imageWithCIImage:[colorImage imageByApplyingTransform:CGAffineTransformMakeScale(scale, scale)]];
    
    // 添加到Container
    UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
    containerView.backgroundColor = [UIColor whiteColor];
    
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
    imageView.image = finalQRImage;
    [containerView addSubview:imageView];
    UIImageView *logo = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,0.3*width,0.3*width)];
    logo.center = CGPointMake(width/2, height/2);
    logo.image = getImageWithName(@"weixinfenxiang_120x120");
    [containerView addSubview:logo];
    
    UIGraphicsBeginImageContextWithOptions(containerView.bounds.size, NO, 0.0);
    [containerView.layer renderInContext:UIGraphicsGetCurrentContext()];
    [containerView drawViewHierarchyInRect:containerView.bounds afterScreenUpdates:NO];
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return img;
}


        UIImage *codeImage = getNewQRCodeImageFromString(codeUrl,[CIColor colorWithRed:0 green:0 blue:0],[CIColor colorWithRed:1 green:1 blue:1]);

おすすめ

転載: blog.csdn.net/LIUXIAOXIAOBO/article/details/130539777