iOS 识别web页上二维码

周末闲来无事,看到微信上有个长按识别二维码的功能,挺好奇它的实现过程,就想着想着如何实现的。下面就是它的大致上的重要技术细节。
思路:
我们oc中是有一个原生的二维码识别库。使用这个的条件是你要有一个二维码的图片就可以了,把图片给它它就能识别图片上的二维码信息。那问题来了怎么获取web页上的二维码呢?这就是这里技术的难点。我的答案是使用js将图片获取下来。下面就看具体做法。
js获取:
大家就会想一个页面上有这么多图片我那里知道我点击后能对应的获取对应图片啊?我这里做的比较粗糟我是给每个图片都给一个点击事件,点击那个图片就能相应的获取对应的图片。
代码:

    [_webViews stringByEvaluatingJavaScriptFromString:@"function registerImageClickAction(){\
     var imgs=document.getElementsByTagName('img');\
     var length=imgs.length;\
     for(var i=0;i<length;i++){\
     img=imgs[i];\
     img.onclick=function(){\
     window.imageUrl.bitUrl(this.src);}\
     }\
     }"];
    [_webViews stringByEvaluatingJavaScriptFromString:@"registerImageClickAction();"];

获取到图片地址后加载具体的图片和识别二维码:

 [self.imageViews sd_setImageWithURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
//        self.imageViews.image = image;
        NSLog(@"这里有图片没有:%@",image);
        //识别图片是否有二维码
        CIContext *contexts = [CIContext contextWithOptions:nil];
        _detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:contexts options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}];
        NSArray *features = [self.detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];
        NSLog(@"有多少个数组:%@",features);
        if (features.count >0) {
            CIQRCodeFeature *feature = [features objectAtIndex:0];
            NSString *scannedResult = feature.messageString;
            NSLog(@"这里可以在图片加载完成之后做些事情:%@",scannedResult);
        }

    }];

代码地址:https://github.com/tangyi1234/WebIdentifyCode

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,698评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,225评论 4 61
  • 阳春三月,微风轻拂过脸庞。 我漫步于长青路上,两旁青松,那么大,那么直,那么默默地守护着这条长青路...
    大圣老师阅读 4,463评论 1 2
  • 感赏儿子能够在周日中午做完所有作业,虽然质量不能达到最高,但是能够提前完成作业就是进步。 在女儿出生后,儿子明显感...
    辉_0495阅读 845评论 0 1
  • 面对喜欢的事物,人,甚至是食物,如果你主动了,不一定能得到。但,如果你不主动,那一定得不到。当然,对于吃货的金牛座...
    傅卷卷阅读 5,252评论 0 0