美文网首页
ios中通过代码生成二维码

ios中通过代码生成二维码

作者: 保持前行 | 来源:发表于2019-06-06 18:23 被阅读0次

    话不多说,直接上代码

    /**

     * 根据CIImage生成指定大小的UIImage

     *

     * @param image CIImage

     * @param size 图片宽度

     */

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

    {

        CGRect extent = CGRectIntegral(image.extent);

        CGFloatscale =MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));

        // 1.创建bitmap;

        size_twidth =CGRectGetWidth(extent) * scale;

        size_theight =CGRectGetHeight(extent) * scale;

        CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();

        CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);

        CIContext *context = [CIContext contextWithOptions:nil];

        CGImageRefbitmapImage = [contextcreateCGImage:imagefromRect: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];

    }

    调用以上方法

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

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

        // 2. 恢复滤镜的默认属性

        [filtersetDefaults];

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

        NSString *urlStr = @"http://www.ychpay.com/down.html";//测试二维码地址,次二维码不能支付,需要配合服务器来二维码的地址(跟后台人员配合)

        NSData *data = [urlStr dataUsingEncoding:NSUTF8StringEncoding];

        // 4. 通过KVO设置滤镜inputMessage数据

        [filtersetValue:dataforKey:@"inputMessage"];

        // 5. 获得滤镜输出的图像

        CIImage*outputImage = [filteroutputImage];

        // 6. 将CIImage转换成UIImage,并放大显示 (此时获取到的二维码比较模糊,所以需要用下面的createNonInterpolatedUIImageFormCIImage方法重绘二维码)

        //    UIImage *codeImage = [UIImage imageWithCIImage:outputImage scale:1.0 orientation:UIImageOrientationUp];

        UIImageView *wechatImageView = [[UIImageView alloc] initWithFrame:CGRectMake(40, 30, SCREEN_WIDTH - 80, SCREEN_WIDTH - 80)];

        wechatImageView.image = [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:200];//重绘二维码,使其显示清晰

        [self.viewaddSubview:wechatImageView];

    只要将url替换成自己的url就好了

    相关文章

      网友评论

          本文标题:ios中通过代码生成二维码

          本文链接:https://www.haomeiwen.com/subject/mtnuxctx.html