iOS生成原生二维码

来源:互联网 发布:微博营销号 知乎 编辑:程序博客网 时间:2024/05/22 03:15
- (void)creatCIQRCodeImage{    // 1.创建过滤器,这里的@"CIQRCodeGenerator"是固定的    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];        // 2.恢复默认设置    [filter setDefaults];        // 3. 给过滤器添加数据    NSString *dataString = [NSString stringWithFormat:@"%@type=0&id=%@",BTCOACHURL,[BTGlobalUser sharedGlobal].defaultUser.userid]; // 0-驾校 1-教练    NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding];    // 注意,这里的value必须是NSData类型    [filter setValue:data forKeyPath:@"inputMessage"];        // 4. 生成二维码    CIImage *outputImage = [filter outputImage];        // 5. 显示二维码    self.myCodeImageView.image = [self creatNonInterpolatedUIImageFormCIImage:outputImage withSize:280];}- (UIImage *)creatNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat)size{    CGRect extent = CGRectIntegral(image.extent);    CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));        // 1. 创建bitmap    size_t width = CGRectGetWidth(extent) * scale;    size_t height = CGRectGetHeight(extent) * scale;    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);    CIContext *context = [CIContext contextWithOptions:nil];    CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);    CGContextScaleCTM(bitmapRef, scale, scale);    CGContextDrawImage(bitmapRef, extent, bitmapImage);        // 2.保存bitmap图片    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);    CGContextRelease(bitmapRef);    CGImageRelease(bitmapImage);        //原图    UIImage *outputImage = [UIImage imageWithCGImage:scaledImage];    //给二维码加 logo 图    UIGraphicsBeginImageContextWithOptions(outputImage.size, NO, [[UIScreen mainScreen] scale]);    [outputImage drawInRect:CGRectMake(0,0 , size, size)];    //logo图    UIImage *waterimage = [UIImage imageNamed:@"com_code2@2x.png"];    //把logo图画到生成的二维码图片上,注意尺寸不要太大(最大不超过二维码图片的%30),太大会造成扫不出来    [waterimage drawInRect:CGRectMake(size/2-30,size/2-30,60,60)];            UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return newPic;        //    return [UIImage imageWithCGImage:scaledImage];}

原创粉丝点击