精华内容
下载资源
问答
  • ios 二维码

    2017-12-21 22:59:22
    ios 二维码,原生代码实现二维码的生成,图片二维码的读取以及扫描二维码
  • iOS 二维码

    2015-10-28 13:50:31
    iOS 二维码二维码iOS开发中,是一种很常见的功能,通过扫描二维码链接指定的网页. 下面介绍了一种使用生成二维码的方式: CIFilter类来生成二维码,下面具体用代码的方式来演示用iOS的原生API生成二维码。 实现...

    iOS 二维码

    二维码在iOS开发中,是一种很常见的功能,通过扫描二维码链接指定的网页.
    下面介绍了一种使用生成二维码的方式:
    CIFilter类来生成二维码,下面具体用代码的方式来演示用iOS的原生API生成二维码。
    实现代码如下:

    /**
         *  1.实例化二维码滤镜
         */
        CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    
        /**
         *  2.恢复滤镜的默认属性 (因为滤镜有可能保存上一次的属性)
         */
        [filter setDefaults];
    
        /**
         *  3.将字符串转换成NSdata
         */
        NSData *data  = [@"https://www.baidu.com" dataUsingEncoding:NSUTF8StringEncoding];
    
        /**
         *  4.通过KVC设置滤镜, 传入data, 将来滤镜就知道要通过传入的数据生成二维码
         */
        [filter setValue:data forKey:@"inputMessage"];
    
        /**
         *  5.生成二维码
         */
        CIImage *outputImage = [filter outputImage];
    
        UIImage *image = [UIImage  imageWithCIImage:outputImage];
    
        /**
         *  6.设置生成好得二维码到imageview上
         */
        self.iv.image = image;
    展开全文
  • ios二维码打包

    2017-11-17 23:19:18
    ios二维码打包 ios二维码打包 ios二维码打包 ios二维码打包 ios二维码打包
  • iOS二维码

    千次阅读 2017-06-23 20:56:18
    二维码生成二维码iOS7中,Apple引入了Core Image filter来生成二维码。使用CoreImage的CIQRCodeGenerator,仅用简单的几行代码就可以生成二维码。CIQRCodeGenerator使用两个参数: inputMessage表示字符串的data ...

    二维码

    生成二维码

    iOS7中,Apple引入了Core Image filter来生成二维码。使用CoreImageCIQRCodeGenerator,仅用简单的几行代码就可以生成二维码。

    CIQRCodeGenerator使用两个参数:

    • inputMessage表示字符串的data
    • inputCorrectionLevel表示不同级别的容错率。从low (“L”, 7%), medium, (“M”, 15%), quartile (“Q”, 25%), 和 high (“H”, 30%)中选择。每个百分比表示弹性水平(resilience level),这决定了条形码对局部损伤的响应程度

    所以创建二维码只需要几步
    1.创建一个filter
    2.设置其inputCorrectionLevelinputMessage
    3.获取结果图片

    CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; [qrFilter setValue:@"H" forKey:@"inputCorrectionLevel"];
    NSData *stringData = [string dataUsingEncoding:NSUTF8StringEncoding]; [qrFilter setValue:stringData forKey:@"inputMessage"];
    CIImage *result = [qrFilter valueForKey:@"outputImage"];

    唯一的问题是,这里输出的图片非常的小。QR code生成器filter创建的图片是每个point对应一个方块。上面创建的图片是27X27个点

    <CIImage: 0x8f0b0a0 extent [0 0 27 27]>

    所以要把QR code绘制到一个比较大的上下文中,并把结果保存为UIImage。然而这里还有一个细节要注意,如果不禁用掉interpolation,得到的结果图片会非常的模糊

    调整后生成二维码的代码如下:

    + (UIImage *) resizeImageWithoutInterpolation:(UIImage *)sourceImage size:(CGSize)size
    {
        UIGraphicsBeginImageContextWithOptions(size, NO, 0);
        CGContextSetInterpolationQuality(UIGraphicsGetCurrentContext(), kCGInterpolationNone);
        [sourceImage drawInRect:(CGRect){.size = size}];
        UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return result;
    }
    
    + (UIImage *) imageWithCIImage: (CIImage *) aCIImage orientation: (UIImageOrientation) anOrientation
    {
        if (!aCIImage) return nil;
    
        CGImageRef imageRef = [[CIContext contextWithOptions:nil] createCGImage:aCIImage fromRect:aCIImage.extent];
        UIImage *image = [UIImage imageWithCGImage:imageRef scale:1.0 orientation:anOrientation];
        CFRelease(imageRef);
    
        return image;
    }
    
    + (UIImage *)QRImageWithString:(NSString *) string size:(CGSize)destSize;
    {
        //创建filter
        CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
        if (!qrFilter)
        {
            NSLog(@"Error: Could not load filter");
            return nil;
        }
    
        // 设置 correction level
        // L 7% , M 15% , Q 25% , H 30%
        [qrFilter setValue:@"H" forKey:@"inputCorrectionLevel"];
    
        //设置输入的text
        NSData *stringData = [string dataUsingEncoding:NSUTF8StringEncoding];
        [qrFilter setValue:stringData forKey:@"inputMessage"];
    
        //获取输出的image
        CIImage *outputImage = [qrFilter valueForKey:@"outputImage"];
    
        UIImage *smallImage = [self imageWithCIImage:outputImage orientation: UIImageOrientationUp];
    
        return [self resizeImageWithoutInterpolation:smallImage size:destSize];
    }

    demo示例地址

    识别二维码

    AV Foundation支持的机器可识别代码,可参考Machine Readable Object Types
    一维码大量用于商店、生成制造业和零售业,可识别的一维码有:

    • UPCE
    • EAN 8
    • EAN 13
    • Code 39
    • Code 39 Mod 43
    • Code 93
    • Code 128
    • Interleaved 2 of 5 (iOS 8 and later)
    • ITF 14 (iOS 8 and later)

    二维码:

    • PDF 417
    • QR Code
    • Aztec
    • Data Matrix (iOS 8 and later)

    基本代码实现

    代码与自定义相机的代码类似,需注意的点有:
    1.捕捉的输出为AVCaptureMetadataOutput类型,通过设置其metadataObjectTypes属性,来指定感兴趣的扫描对象

        self.metadataOutput = [[AVCaptureMetadataOutput alloc] init];
        if ([self.captureSession canAddOutput:self.metadataOutput]) {
            [self.captureSession addOutput:self.metadataOutput];
    
            dispatch_queue_t mainQueue = dispatch_get_main_queue();
            [self.metadataOutput setMetadataObjectsDelegate:self queue:mainQueue];
    
            NSArray *types = @[AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode];
            self.metadataOutput.metadataObjectTypes = types;
        }

    注意这里,设置了setMetadataObjectsDelegate的代理,需遵循AVCaptureMetadataOutputObjectsDelegate协议

    2.实现AVCaptureMetadataOutputObjectsDelegate协议- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection 方法,如下:

    -(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
        if (metadataObjects != nil && [metadataObjects count] > 0) {
            AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];
            if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) {
    
        ....
            }
        }    
    }

    可通过AVMetadataMachineReadableCodeObject类的stringValue属性获取二维码对应的字符串

    可参考的资料:

    其它属性

    AVMetadataMachineReadableCodeObject类的其它属性

    • bounds提供了识别码的按坐标对齐的矩形边界
    • corners提供了角点字典表示的NSArray

    利用这些属性可以绘制出识别码的大小,如下:

    这里写图片描述

    参考CodeKamera

    扫描框

    以下内容来自iOS 原生扫 QR 码的那些事

    扫码时 previewLayer 的扫描范围是整个可视范围的,但有些需求可能需要指定扫描的区域,虽然我觉得这样很没有必要,因为整个屏幕都可以扫又何必指定到某个框呢?但如果真的需要这么做可以设定 metadataOutputrectOfInterest

    需要注意的是:

    1.rectOfInterest 的值比较特别,需要进行转化。它的默认值是 (0.0, 0.0, 1.0, 1.0)

    metadataOutput.rectOfInterest = [previewLayer metadataOutputRectOfInterestForRect:CGRectMake(80, 80, 160, 160)]; // 假设扫码框的 Rect 是 (80, 80, 160, 160)  

    2.rectOfInterest 不可以直接在设置 metadataOutput 时接着设置,而需要在这个 AVCaptureInputPortFormatDescriptionDidChangeNotification 通知里设置,否则 metadataOutputRectOfInterestForRect: 转换方法会返回 (0, 0, 0, 0)

    [[NSNotificationCenter defaultCenter] addObserverForName:AVCaptureInputPortFormatDescriptionDidChangeNotification
                                                            object:nil
                                                             queue:[NSOperationQueue currentQueue]
                                                        usingBlock: ^(NSNotification *_Nonnull note) {
          metadataOutput.rectOfInterest = [previewLayer metadataOutputRectOfInterestForRect:CGRectMake(80, 80, 160, 160)];
    }];

    扫码框的外观

    扫码框四周一般都是半透明的黑色,而它里面是没有颜色的

    这里写图片描述

    你可以在扫码框四周各添加视图,但更简单的方法是自定义一个视图,在 drawRect: 画扫码框的 path。代码如下:

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    CGFloat width = CGRectGetWidth([UIScreen mainScreen].bounds);  
    [[[UIColor blackColor] colorWithAlphaComponent:0.5] setFill];
    
    CGMutablePathRef screenPath = CGPathCreateMutable();  
    CGPathAddRect(screenPath, NULL, self.bounds);
    
    CGMutablePathRef scanPath = CGPathCreateMutable();  
    CGPathAddRect(scanPath, NULL, CGRectMake(80, 80, 160, 160);
    
    CGMutablePathRef path = CGPathCreateMutable();  
    CGPathAddPath(path, NULL, screenPath);  
    CGPathAddPath(path, NULL, scanPath);
    
    CGContextAddPath(ctx, path);  
    CGContextDrawPath(ctx, kCGPathEOFill); // kCGPathEOFill 方式
    
    CGPathRelease(screenPath);  
    CGPathRelease(scanPath);  
    CGPathRelease(path); 

    识别图片中的二维码

    从 iOS 8 开始可以从图片文件解析出二维码,用到 Core ImageCIDetector

    如下:

        UIImage *originalImage = [info valueForKey:UIImagePickerControllerOriginalImage];
    
        CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{ CIDetectorAccuracy:CIDetectorAccuracyHigh }];
        CIImage *image = [[CIImage alloc] initWithImage:originalImage];
        NSArray *features = [detector featuresInImage:image];
        CIQRCodeFeature *feature = [features firstObject];
        if (feature) {
            [self showAlertViewWithMessage:feature.messageString];
            [picker dismissViewControllerAnimated:YES completion:nil];
        } else {
            NSLog(@"没有二维码");
            [picker dismissViewControllerAnimated:YES completion:NULL];
        }

    参考文档

    展开全文
  • iOS 二维码扫描

    2016-07-12 15:28:19
    iOS 二维码扫描
  • iOS二维码生成

    2017-02-14 15:59:09
    iOS二维码生成
  • ios 二维码扫描

    2015-10-15 13:23:38
    ios 二维码扫描
  • IOS二维码生成

    2015-09-21 14:22:25
    QR-Code-Encoder,IOS二维码生成Demo 可以直接生成二维码
  • iOS 二维码生成器

    2016-07-12 15:26:58
    iOS 二维码生成器
  • iOS二维码的生成代码

    2020-08-29 17:41:22
    主要为大家详细介绍了iOS二维码的生成代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • iOS二维码(扫描二维码)

    热门讨论 2013-01-17 22:10:11
    iOS二维码信息、扫描二维码信息、信息二维码转换
  • iOS 二维码生成和扫描

    2017-02-14 17:11:17
    iOS 二维码生成和扫描
  • iOS二维码扫描demo

    2015-12-21 14:36:01
    简单的iOS二维码扫描demo,仅供学习参考!
  • 主要为大家详细介绍了iOS二维码生成和扫描的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • iOS 二维码扫描 - 生成二维码图片-扫描二维码图片
  • 主要介绍了iOS 二维码扫描相关功能实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • iOS二维码生成Demo

    2015-12-24 19:00:38
    iOS二维码生成Demo,简单的应用,可以先看一下我的博客,了解一下思路,就可以很方便的实现字符串生成二维码的功能了,希望能帮到你!
  • ios 二维码扫描动态

    2016-07-29 17:03:03
    ios二维码扫描。扫描线可由上之下循环扫描。因为做的没有微信那么好看,所以只要一分

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,570
精华内容 9,828
关键字:

ios二维码