如何利用Xcode自带的方法生成二维码

本文介绍了如何使用CoreImage库生成清晰的二维码图片,并提供了一种方法来获取指定大小的二维码图片,解决系统默认获取的二维码图片清晰度不高的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 使用前需导入#import <CoreImage/CoreImage.h>
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
        // 1.实例化二维码滤镜
        CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    
        // 2.恢复滤镜的默认属性
        [filter setDefaults];
    
        // 3.二维码信息
        NSString *str = @"哎呀我去"; // 展示一串文字
    //    NSString *str = @"http://www.baidu.com"; // 直接打开网页
    
        // 4.将字符串转成二进制数据
        NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    
        // 5.通过KVC设置滤镜inputMessage数据
        [filter setValue:data forKey:@"inputMessage"];
    
        // 6.获取滤镜输出的图像
        CIImage *outputImage = [filter outputImage];
    
        // 7.将CIImage转成UIImage
        UIImage *image = [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:200];
    
        // 8.展示二维码
        self.imageView.image = image;
    }使用前需导入#import <CoreImage/CoreImage.h>
    • 系统默认获取到的二维码图片不太清晰,可以利用下面的方法,获取指定大小的二维码图片
    /**
     *  根据CIImage生成指定大小的UIImage
     *
     *  @param image CIImage
     *  @param size  图片宽度
     */
    - (UIImage *)createNonInterpolatedUIImageFormCIImage:(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);
        return [UIImage imageWithCGImage:scaledImage];
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值