浅谈一下如何生成一个二维码和内嵌头像Logo的二维码

这是本人第一次写博客,说实在话有点小紧张,说的不好的地方请担待!欢迎补充更改!

   1.如何生成二维码

/**

*  qrString 为二维码的URL(即扫描二维码后出来的东西)

*  返回一个CIImage 

*/

- (CIImage *)createQRForString:(NSString *)qrString {

    // 1.实例化二维码滤镜

    CIFilter *filter = [CIFilterfilterWithName:@"CIQRCodeGenerator"];// name为固定的

    

    // 2.恢复滤镜的默认属性 (因为滤镜有可能保存上一次的属性)

    [filter setDefaults];

    

    // 3.将字符串转换成NSdata

    NSData *data  = [qrStringdataUsingEncoding:NSUTF8StringEncoding];

    

    // 4.通过KVC设置滤镜,传入data,将来滤镜就知道要通过传入的数据生成二维码

    [filter setValue:data forKey:@"inputMessage"]; //key 为固定的

    

    // 5.生成二维码

    CIImage *outputImage = [filter outputImage];

    return outputImage;

}


/**

*  当调用上边的方法后 会 生成一个CIImage 这时需要调用以下方法

*  返回一个Image (即二维码  黑白色)

*/


- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size {

    CGRect extent = CGRectIntegral(image.extent);

    CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));

    // 创建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 = [CIContextcontextWithOptions:nil];

    CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];

    CGContextSetInterpolationQuality(bitmapRef,kCGInterpolationNone);

    CGContextScaleCTM(bitmapRef, scale, scale);

    CGContextDrawImage(bitmapRef, extent, bitmapImage);

    // 保存bitmap到图片

    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);

    CGContextRelease(bitmapRef);

    CGImageRelease(bitmapImage);


    return [UIImageimageWithCGImage:scaledImage];

    

}

 

 2.使用第三方库 libqrencode (纯C代码的一个库) 生成二维码   (使用较简单)

   下载 1.  libqrencode 库  这里就不提供下载地址了  

       2.  导入头文件  #import "QRCodeGenerator.h"

           

       UIImageView * imageView = [[UIImageViewalloc] initWithFrame:CGRectMake(10,150, 300, 300)];

// 直接调用即可 URLstr:需要加载的信息 

    imageView.image = [QRCodeGeneratorqrImageForString:URLstr imageSize:250.f];

    [self.viewaddSubview:imageView];

  其实还有很多方式如:ZbarSDK 等等。看个人喜好了



    3.生成带Logo的二维码
    addImage为Logo,toImage为生成的二维码,返回的Image就可以展示了

-(UIImage *)addImage:(UIImage *)image1 toImage:(UIImage *)image2

{

    //    image1 添加到 image2

    UIGraphicsBeginImageContext(image2.size);

    

    //Draw image2 

    [image2 drawInRect:CGRectMake(0,0, image2.size.width, image2.size.height)];

    

    //Draw image1       addImage在toImage上的位置

    [image1 drawInRect:CGRectMake(_logoOrigin_X,_logoOrigin_Y,_barcodeImaView.frame.size.height*SCALE_FACTOR-10,_barcodeImaView.frame.size.height*SCALE_FACTOR-10)];

    

   //图像缩放

    UIImage *resultImage=UIGraphicsGetImageFromCurrentImageContext();

    

    UIGraphicsEndImageContext();

    

    return resultImage;

}




  // 注:这里合并两个Image后  Logo图像有点失真 (还请各位知道的进行补充,感谢浏览)





阅读更多
换一批

没有更多推荐了,返回首页