【iOS】CoreImage原生二维码生成(二)一个方法生成带logo的二维码

在上一篇中介绍了怎么生成二维码:【iOS】CoreImage原生二维码生成(一)。这一篇说说怎么生成带logo的二维码。

这里的思路是,在生成的二维码的中心加一个logo图片。这里的难点就是怎么在图片中加一个图片了。

效果图;


可以扫一扫的。

这个步骤:生成二维码图片--> 改变二维码图片的大小 --> 给二维码图片增加logo图片 --> 显示

下面这个方法可以解决:

图片增加水印

/**
 *  图片增加水印
 *
 *  @param superImage 需要增加水印的图片
 *  @param subImage   水印图片
 *  @param posRect    水印的位置 和 水印的大小
 *
 *  @return 加水印后的新图片
 */
- (UIImage *)addImageToSuperImage:(UIImage *)superImage withSubImage:(UIImage *)subImage andSubImagePosition:(CGRect)posRect{
    
    UIGraphicsBeginImageContext(superImage.size);
    [superImage drawInRect:CGRectMake(0, 0, superImage.size.width, superImage.size.height)];
    //四个参数为水印图片的位置
    [subImage drawInRect:posRect];
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resultingImage;
}

现在logo可以添加上去了。

/**
 *  生成带logo的二维码
 *  二维码和logo都是正方形的
 *  @param urlString     二维码中的链接
 *  @param QRCodeCGRect  二维码的CGRect
 *  @param logoImage     二维码中的logo
 *  @param logoImageSize logo的大小
 *  @param cornerRadius  logo的圆角值大小
 *
 *  @return 生成的二维码
 */
+ (HGDQQRCodeView *)creatQRCodeWithURLString:(NSString *)urlString superView:(UIView *)superView logoImage:(UIImage *)logoImage logoImageSize:(CGSize)logoImageSize logoImageWithCornerRadius:(CGFloat)cornerRadius{
    // 先移除子视图
    HGDQQRCodeView *oldQRCodeView = [superView viewWithTag:123];
    [oldQRCodeView removeFromSuperview];
    
    HGDQQRCodeView *QRCodeView = [[HGDQQRCodeView alloc] init];
    QRCodeView.tag = 123;
    QRCodeView.frame = CGRectMake(0, 0, superView.frame.size.width, superView.frame.size.height);
    CIImage *ciImage = [QRCodeView creatQRcodeWithUrlstring:urlString]; // 生成二维码
    UIImage *qrImage = [QRCodeView changeImageSizeWithCIImage:ciImage andSize:superView.frame.size.width]; // 改变二维码的大小
    if (logoImage != nil) {
        if (cornerRadius < 0) {
            cornerRadius = 0;
            NSLog(@"cornerRadius 不能小于0");
        }
        qrImage = [QRCodeView addImageToSuperImage:qrImage withSubImage:[QRCodeView imageWithCornerRadius:cornerRadius image:logoImage] andSubImagePosition:CGRectMake((superView.frame.size.width - logoImageSize.width)/2, (superView.frame.size.height - logoImageSize.height)/2, logoImageSize.width, logoImageSize.height)]; // 增加logo
    }
    QRCodeView.layer.contents = (__bridge id)qrImage.CGImage;
    [superView addSubview:QRCodeView];
    return QRCodeView;
}
使用这个类方法(加方法)就可以一个方法生成带logo的二维码了。

怎么使用呢?

1.在VC中包含头文件

#import "ViewController.h"
#import "HGDQQRCodeView.h"
2.创建一个试图 显示二维码

3.事件触发

/**
 *  生成二维码
 *
 *  @param sender sender description
 */
- (IBAction)btnClick:(id)sender {
    [HGDQQRCodeView creatQRCodeWithURLString:@"http://blog.csdn.net/zhuming3834" superView:self.QRView logoImage:[UIImage imageNamed:@"logo"] logoImageSize:CGSizeMake(40, 40) logoImageWithCornerRadius:0];
}
至此生成的二维码就可以显示出来了。

github代码地址:请点击我

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值