IOS 二维码生成

#pragma mark -- 生成二维码

+ (instancetype)creatImageWithQrCodeText:(NSString *)qrT WithCreatSize:(CGFloat)size{

    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

    [filter setDefaults];

    NSData *filterData = [qrT dataUsingEncoding:NSUTF8StringEncoding];

    [filter setValue:filterData forKeyPath:@"inputMessage"];

    CIImage *outPutImage = [filter outputImage];

    return [self filterTheQrCode:outPutImage WithSize:size];

}

+ (UIImage *)filterTheQrCode:(CIImage *)ciImage WithSize:(CGFloat)size{

    CGRect extent = CGRectIntegral(ciImage.extent);//获取图片的规格

    CGFloat imageWidth = CGRectGetWidth(extent);

    CGFloat imageHeight = CGRectGetHeight(extent);

    CGFloat scale = MIN(size/imageWidth, size/imageHeight);//计算像素比例

    size_t width = imageWidth*scale;

    size_t height = imageHeight*scale;

    CGColorSpaceRef csr = CGColorSpaceCreateDeviceGray();//创建一个颜色空间

    CGContextRef bitMapRef = CGBitmapContextCreate(nil, width, height, 8, 0, csr, kCGImageAlphaNone);//绘制空间的规格

    CIContext *context = [CIContext contextWithOptions:nil];//获取创建的颜色空间

    CGImageRef bitmapImage = [context createCGImage:ciImage fromRect:extent];//获取要编辑的过滤图

    CGContextSetInterpolationQuality(bitMapRef, kCGInterpolationNone);//连接颜色空间,CGInterpolationQuality表示插入的方式

    CGContextScaleCTM(bitMapRef, scale, scale);//更改过滤图的坐标

    CGContextDrawImage(bitMapRef, extent, bitmapImage);//重新绘制过滤图

    // 2.保存bitmap到图片

    CGImageRef scaledImage = CGBitmapContextCreateImage(bitMapRef);//按照绘制空间的规格生成新图片

    CGContextRelease(bitMapRef);

    CGImageRelease(bitmapImage);

    return [UIImage imageWithCGImage:scaledImage];

  }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 二维码生成步骤: 1.导入CoreImage框架 2.通过滤镜CIFilter生成二维码 示例代码: 1.创建过滤...
    ssim阅读 4,357评论 0 3
  • iOS7之后,可以使用原生的CIFilter创建二维码。 一、生成二维码 首先是二维码的生成,使用CIFilter...
    _悟了个空阅读 3,547评论 0 1
  • 自定义二维码,就是指给系统二维码添加一些图片(前景或者背景图片), 或者改变下颜色 自定义二维码实质是通过Quar...
    翻这个墙阅读 6,418评论 0 0
  • 在如今的开发中经常会遇到二维码生成和二维码读取很是识别的需求网上也有一些封装好的第三方的,但是楼主还是觉得自己写一...
    进阶的蚊子阅读 6,303评论 0 2
  • 一、扫描 1、 ZBar ZBar在扫描的灵敏度上,和内存的使用上相对于ZXing上都是较优的,但是对于 “圆角二...
    空白Null阅读 4,709评论 0 2