二维码生成

iOS(OC)用系统方法生成二维码,本文章只是生成

导入头文件 #import <CoreImage/CoreImage.h>

           //创建名为"CIQRCodeGenerator"的CIFilter
            CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
            //将filter所有属性设置为默认值
            [filter setDefaults];
            
            //将所需尽心转为UTF8的数据,并设置给filter
            NSString * str = self.urlTextF.text.length>0?self.urlTextF.text:@"这是一个测试二维码";
            NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
            [filter setValue:data forKey:@"inputMessage"];
            
            //设置二维码的纠错水平,越高纠错水平越高,可以污损的范围越大
            /*
             * L: 7%
             * M: 15%
             * Q: 25%
             * H: 30%
             */
            [filter setValue:@"H" forKey:@"inputCorrectionLevel"];
            //拿到二维码图片,此时的图片不是很清晰,需要二次加工
            CIImage *outPutImage = [filter outputImage];
//            UIImage * codeImg = [self sencond_getHDImgWithCIImage:outPutImage
//                                                             size:CGSizeMake(130, 130)
//                                                       pointColor:nil
//                                                        backColor:nil];
            
            UIImage * codeImg = [self getHDImgWithCIImage:outPutImage
                                                     size:CGSizeMake(130, 130)
                                                 waterImg:[UIImage imageNamed:@"login_logo"]
                                                waterSize:CGSizeMake(35, 35)];
            [self.codeImgV setImage:codeImg];
复制代码

这个时候已经生成了二维码,然后需要对其进行大小,颜色,log的编辑

调整图片大小,颜色


/**
 调整二维码清晰度

 @param img 二维码图片
 @param size 二维码大小
 @param pointColor 二维码的颜色(默认黑色)
 @param backgroundColor 二维码的背景(默认白色)
 @return 生成后的二维码
 */
- (UIImage *)sencond_getHDImgWithCIImage:(CIImage *)img size:(CGSize)size pointColor:(UIColor *)pointColor backColor:(UIColor *)backgroundColor{
    
    //设置二维码的颜色
    if (pointColor == nil) {
     pointColor = [UIColor blackColor];
    }
    
    //设置背景颜色
    if (backgroundColor == nil) {
        backgroundColor = [UIColor whiteColor];
    }
    CIFilter *colorFilter = [CIFilter filterWithName:@"CIFalseColor"
                                       keysAndValues:
                             @"inputImage", img,
                             @"inputColor0", [CIColor colorWithCGColor:pointColor.CGColor],
                             @"inputColor1", [CIColor colorWithCGColor:backgroundColor.CGColor],
                             nil];
    
    CIImage *qrImage = colorFilter.outputImage;
    
    //绘制
    CGImageRef cgImage = [[CIContext contextWithOptions:nil] createCGImage:qrImage fromRect:qrImage.extent];
    UIGraphicsBeginImageContext(size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetInterpolationQuality(context, kCGInterpolationNone);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawImage(context, CGContextGetClipBoundingBox(context), cgImage);
    UIImage *codeImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    CGImageRelease(cgImage);
    
    return codeImage;
}
复制代码

添加水印log图片

/**
 调整二维码清晰度,添加水印图片

 @param img 模糊的二维码图片
 @param size 需要的二维码宽高
 @param waterImg log图片
 @param waterSize log图片的大小
 @return 添加log后的二维码
 */
- (UIImage *)getHDImgWithCIImage:(CIImage *)img size:(CGSize)size waterImg:(UIImage *)waterImg waterSize:(CGSize)waterSize {
    
    CGRect extent = CGRectIntegral(img.extent);
    CGFloat scale = MIN(size.width/CGRectGetWidth(extent), size.height/CGRectGetHeight(extent));
    
    //1.创建bitmap;
    size_t width = CGRectGetWidth(extent) * scale;
    size_t height = CGRectGetHeight(extent) * scale;
    //创建一个DeviceGray颜色空间
    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
    //width:图片宽度像素
    //height:图片高度像素
    //bitsPerComponent:每个颜色的比特值,例如在rgba-32模式下为8
    //bitmapInfo:指定的位图应该包含一个alpha通道。
    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
    CIContext *context = [CIContext contextWithOptions:nil];
    //创建CoreGraphics image
    CGImageRef bitmapImage = [context createCGImage:img 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.width, size.height)];
    //水印图片
    //把水印图片画到生成的二维码图片上,注意尺寸不要太大(根据上面生成二维码设置的纠错程度设置),否则有可能造成扫不出来
    [waterImg drawInRect:CGRectMake((size.width-waterSize.width)/2.0, (size.height-waterSize.height)/2.0, waterSize.width, waterSize.height)];
    UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return newPic;
}
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二维码生成驱动C语言的过程如下: 首先,需要了解二维码的生成原理和格式。二维码是一种矩阵型的图形编码,可以存储大量信息。它的生成过程包括数据编码、纠错码计算和图形绘制三个主要步骤。 在C语言中,可以使用开源的二维码生成库,如ZXing或QRcode等。这些库提供了控制二维码生成的函数和接口,方便我们使用C语言进行二维码生成。 首先,需要初始化一个二维码生成器对象。然后,调用相关函数设置生成器的参数,如二维码版本、纠错级别、编码方式等。这些参数将影响生成的二维码的容量和可靠性。 接下来,需要将待编码的数据传递给生成器。生成器会根据设置的参数将数据编码成二维码格式。编码过程中,可以根据需要进行错误校正,以提高二维码的可靠性。 最后,调用绘制函数将生成的二维码图形绘制到指定的输出设备或文件中。绘制过程中,可以设置二维码的尺寸、颜色、间距等属性。 需要注意的是,二维码的生成需要依赖相应的驱动程序和库文件,因此在使用C语言进行二维码生成前,需要安装和配置相应的驱动和库。 总而言之,生成二维码的过程需要借助于C语言的二维码生成库,通过设置参数、传递数据、进行编码和绘制等步骤来实现。通过合理的调用和配置,可以生成符合要求的二维码图形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值