ios – 如何从静态图像中读取QR码

栏目: IOS · 发布时间: 7年前

内容简介:我知道您可以使用AVFoundation使用设备的相机扫描QR码.现在问题来了,如何从静态UIImage对象中执行此操作?翻译自:https://stackoverflow.com/questions/35956538/how-to-read-qr-code-from-static-image

我知道您可以使用AVFoundation使用设备的相机扫描QR码.现在问题来了,如何从静态UIImage对象中执行此操作?

iOS API提供CoreImage框架中的CIDetector类.

CIDetector可让您在图像中找到特定的图案,如面部,微笑,眼睛,或者在我们的案例中:QRCodes.

以下是在Objective-C中从UIImage检测QRCode的代码:

-(NSArray *)detectQRCode:(UIImage *) image
{
    @autoreleasepool {
        NSLog(@"%@ :: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
        NSCAssert(image != nil, @"**Assertion Error** detectQRCode : image is nil");

        CIImage* ciImage = UIImage.CIImage; // assuming underlying data is a CIImage
        //CIImage* ciImage = [CIImage initWithCGImage: UIImage.CGImage]; // to use if the underlying data is a CGImage

        NSDictionary* options;
        CIContext* context = [CIContext context];
        options = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh }; // Slow but thorough
        //options = @{ CIDetectorAccuracy : CIDetectorAccuracyLow}; // Fast but superficial

        CIDetector* qrDetector = [CIDetector detectorOfType:CIDetectorTypeQRCode
                                                    context:context
                                                    options:options];
        if ([[ciImage properties] valueForKey:(NSString*) kCGImagePropertyOrientation] == nil) {
            options = @{ CIDetectorImageOrientation : @1};
        } else {
            options = @{ CIDetectorImageOrientation : [[ciImage properties] valueForKey:(NSString*) kCGImagePropertyOrientation]};
        }

        NSArray * features = [qrDetector featuresInImage:ciImage
                                                 options:options];

        return features;

    }
}

如果存在并检测到QRCode,则返回的NSArray *将包含CIFeature *.如果没有QRCode,NSArray *将为零.如果QRCode解码失败,NSArray *将没有元素.

要获取编码的字符串:

if (features != nil && features.count > 0) {
    for (CIQRCodeFeature* qrFeature in features) {
        NSLog(@"QRFeature.messageString : %@ ", qrFeature.messageString);
    }
}

在@ Duncan-C的答案中,您可以提取QRCode角并在图像上绘制QRCode的封闭边界框.

注意 :

在iOS10.0 beta 6下,当使用来自cameraSampleBuffer的图像时,调用[qrDetector featuresInImage:ciImage选项:选项]会记录此内部警告(它运行顺利但是垃圾邮件控制台带有此消息,我找不到办法现在摆脱它):

Finalizing CVPixelBuffer 0x170133e20 while lock count is 1.

资源 :

Apple Dev API Reference – CIDetector

Apple Dev API Programming guide – Face detection

翻译自:https://stackoverflow.com/questions/35956538/how-to-read-qr-code-from-static-image


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

敏捷教练

敏捷教练

[英] Rachel Davies、[英] Liz Sedley / 徐毅、袁店明 / 清华大学出版社 / 2013-7 / 49.00元

《敏捷教练:如何打造优秀的敏捷团队》取材于国际知名敏捷教练的真实经历,展示了他们在辅导团队进行敏捷实践过程中所积累的辅导技巧,凝聚着他们在对敏捷辅导的真知灼见,每章还针对特定主题总结了在转型过程中教练和团队可能面对的障碍及其应对方案。 《敏捷教练:如何打造优秀的敏捷团队》具有较强的实用性和指导性,适合项目经理、技术总监和敏捷团队的所有成员阅读与参考。一起来看看 《敏捷教练》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具