iOS 扫描相册图片二维码

作者: QiShare | 来源:发表于2018-12-13 16:30 被阅读145次

级别:★★☆☆☆
标签:「iOS CIDetector」「CIQRCodeFeature」「识别相册图片」
作者: Xs·H
审校: QiShare团队


接上篇 iOS 扫描二维码/条形码,本文补充介绍扫描相册图片上二维码的实现方式。先看看QiQRCode中的示例效果:

iOS 扫描相册图片上二维码效果

iOS 8之后,可以结合CIDetector使用CIQRCodeFeature实现扫描相册图片上二维码的功能。具体实现过程如下:

1、遵守协议
@interface QiCodeManager () <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
2、打开相册
- (void)presentPhotoLibraryWithRooter:(UIViewController *)rooter callback:(nonnull void (^)(NSString * _Nonnull))callback {
    _callback = callback;
    
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    // imagePicker.allowsEditing = YES;
    imagePicker.delegate = self;
    [rooter presentViewController:imagePicker animated:YES completion:nil];
}
3、实现代理
// UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {
    
    UIImage *pickedImage = info[UIImagePickerControllerEditedImage] ?: info[UIImagePickerControllerOriginalImage];
    CIImage *detectImage = [CIImage imageWithData:UIImagePNGRepresentation(pickedImage)];
    
    CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy: CIDetectorAccuracyLow}];
    CIQRCodeFeature *feature = (CIQRCodeFeature *)[detector featuresInImage:detectImage options:nil].firstObject;
    
    [picker dismissViewControllerAnimated:YES completion:^{
        if (feature.messageString) {
            [self handleCodeString:feature.messageString];
        }
    }];
}
4、透传给业务
- (void)handleCodeString:(NSString *)codeString {
    
    if (_autoStop) {
        [self stopScanning];
    }
    if (_callback) {
        _callback(codeString);
    }
}
5、业务调用方式
// 创建“相册”按钮
UIBarButtonItem *photoItem = [[UIBarButtonItem alloc] initWithTitle:@"相册" style:UIBarButtonItemStylePlain target:self action:@selector(photo:)];

self.navigationItem.rightBarButtonItem = photoItem;
// 实现“相册”按钮方法
- (void)photo:(id)sender {
    
    __weak typeof(self) weakSelf = self;
    [_codeManager presentPhotoLibraryWithRooter:self callback:^(NSString * _Nonnull code) {
        [weakSelf performSegueWithIdentifier:@"showCodeGeneration" sender:code];
    }];
}

上述代码中的核心步骤是第3步—实现代理。
我们通过UIImagePickerController拿到image后,使用CIDetectorCIQRCodeFeature读取image上的信息,最终得到的feature.messageString就是二维码的字符串信息。


示例源码QiQRCode可从GitHub的QiShare开源库中获取。


作者微信:


关注我们的途径有:
QiShare(简书)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公众号)

推荐文章:
iOS 了解Xcode Bitcode
iOS 重绘之drawRect
iOS 编写高质量Objective-C代码(八)
iOS KVC与KVO简介
奇舞周刊

相关文章

  • iOS无法识别相册中的二维码

    前几天项目中要加入一个扫描二维码的功能,包括相机扫描和相册扫描,因为项目是从iOS 9及以上支持的,所以相册扫描直...

  • 二维码扫描

    二维码扫描库 最全最稳定的二维码扫描库 (有so源码)Zbar源码 ZBar扫码(只有扫码,无相册选取图片解码...

  • iOS二维码扫描和创建(下)

    在上一篇文章《二维码扫描和创建(上)》中我们已经介绍了三种扫描二维码的方式和如何扫描相册中的二维码图片,想查看的可...

  • iOS 扫描相册图片二维码

    级别:★★☆☆☆标签:「iOS CIDetector」「CIQRCodeFeature」「识别相册图片」作者: X...

  • Android扫码二维码、美女瀑布流、知乎网易音乐、动画源码等

    Android精选源码 QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生... 一个简洁好看的load...

  • iOS开发:二维码扫描与生成(扫描篇)

    iOS开发中经常要用到生成二维码与扫描二维码的功能,iOS7开始,系统支持原生的扫描二维码,iOS7 扫描二维码可...

  • Android 使用Zxing报错:Channel is un

    使用Zxing的扫描二维码库,修改成从相册识别二维码图片,根据网上的demo修改,继而在我使用的fragment报...

  • 二维码生成与扫描

    1.生成二维码 2.扫描二维码 3.从相册照片中获取二维码 详见二维码扫描demo

  • 微信扫一扫

    发现扫描二维码支持即扫,也支持稍后图片识别二维码(右上角“相册”) 在黑暗环境中,会自动提供“手电筒”功能

  • 原生实现扫描功能

    前言:从iOS7开始,苹果就加入了相机二维码扫描的原生api,继而iOS8之后也支持图片二维码识别功能。特此总结下...

网友评论

    本文标题:iOS 扫描相册图片二维码

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