美文网首页
OC: 根据文字或者图片构建二维码(QR)

OC: 根据文字或者图片构建二维码(QR)

作者: 一欧Yiou | 来源:发表于2018-08-08 14:30 被阅读8次

    可以单独根据文字构建二维码, 或者单独图片, 或者图片文字一起构建
    直接上代码

    + (void)qrImageWithString:(NSString *)string avatar:(UIImage *)avatar scale:(CGFloat)scale completion:(void (^)(UIImage *))completion {
        
        NSAssert(completion != nil, @"必须传入完成回调");
        
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            
            CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
            
            [qrFilter setDefaults];
            [qrFilter setValue:[string dataUsingEncoding:NSUTF8StringEncoding] forKey:@"inputMessage"];
            
            CIImage *ciImage = qrFilter.outputImage;
            
            CGAffineTransform transform = CGAffineTransformMakeScale(10, 10);
            CIImage *transformedImage = [ciImage imageByApplyingTransform:transform];
            
            CIContext *context = [CIContext contextWithOptions:nil];
            CGImageRef cgImage = [context createCGImage:transformedImage fromRect:transformedImage.extent];
            UIImage *qrImage = [UIImage imageWithCGImage:cgImage scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];
            CGImageRelease(cgImage);
            
            if (avatar != nil) {
                qrImage = [self qrcodeImage:qrImage addAvatar:avatar scale:scale];
            }
            
            dispatch_async(dispatch_get_main_queue(), ^{ completion(qrImage); });
        });
    }
    
    + (UIImage *)qrcodeImage:(UIImage *)qrImage addAvatar:(UIImage *)avatar scale:(CGFloat)scale {
        
        CGFloat screenScale = [UIScreen mainScreen].scale;
        CGRect rect = CGRectMake(0, 0, qrImage.size.width * screenScale, qrImage.size.height * screenScale);
        
        UIGraphicsBeginImageContextWithOptions(rect.size, YES, screenScale);
        
        [qrImage drawInRect:rect];
        
        CGSize avatarSize = CGSizeMake(rect.size.width * scale, rect.size.height * scale);
        CGFloat x = (rect.size.width - avatarSize.width) * 0.5;
        CGFloat y = (rect.size.height - avatarSize.height) * 0.5;
        [avatar drawInRect:CGRectMake(x, y, avatarSize.width, avatarSize.height)];
        
        UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
        
        UIGraphicsEndImageContext();
        
        return [UIImage imageWithCGImage:result.CGImage scale:screenScale orientation:UIImageOrientationUp];
    }
    

    相关文章

      网友评论

          本文标题:OC: 根据文字或者图片构建二维码(QR)

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