美文网首页Android扫描
iOS微小型条码的扫描

iOS微小型条码的扫描

作者: chilim | 来源:发表于2016-06-29 11:48 被阅读108次

之前做了一个功能,要求扫描二维码和微小型条码的扫描,微小型条码有多小,当客户一拿过来的时候我一脸蒙逼。条码高度就只有这一行字的高度,在纸上密密麻麻贴了一大条。这怎么扫?我马上用ZXing,ZBar什么的试了下,成功率极低。这显然无法满足需求。然后自己琢磨用系统提供的方法实现。先上代码:

/// 开始准备扫描(关键代码)
- (void)beginScanning {
//初始化相机设备
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
if (!input) {
    return;
}
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

//========核心代码==========设置扫描区域//
CGSize size = self.view.bounds.size;
CGRect cropRect = _scanWindow.frame;
CGFloat p1 = size.height/size.width;
CGFloat p2 = 1920./1080.;//使用 _session.sessionPreset = AVCaptureSessionPreset1920x1080;
if (p1 < p2) {
    CGFloat fixHeight = self.view.bounds.size.width * 1920. / 1080.;
    CGFloat fixPadding = (fixHeight - size.height)/2;
    output.rectOfInterest = CGRectMake((cropRect.origin.y + fixPadding)/fixHeight,
                                       cropRect.origin.x/size.width,
                                       cropRect.size.height/fixHeight,
                                       cropRect.size.width/size.width);
} else {
    CGFloat fixWidth = self.view.bounds.size.height * 1080. / 1920.;
    CGFloat fixPadding = (fixWidth - size.width)/2;
    output.rectOfInterest = CGRectMake(cropRect.origin.y/size.height,
                                       (cropRect.origin.x + fixPadding)/fixWidth,
                                       cropRect.size.height/size.height,
                                       cropRect.size.width/fixWidth);
}
_session = [[AVCaptureSession alloc]init];

//扫描小型条码使用图片输出 1920x1080提高精确度
_session.sessionPreset = AVCaptureSessionPreset1920x1080;

[_session addInput:input];
[_session addOutput:output];

//设置条码类型
output.metadataObjectTypes=@[AVMetadataObjectTypeCode128Code];

AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
layer.videoGravity = AVLayerVideoGravityResizeAspectFill;
layer.frame = self.view.layer.bounds;
[self.view.layer insertSublayer:layer atIndex:0];
[_session startRunning];}

前面没什么说的,初始化video,input,output。关键问题来了,正确设置扫描区域,这一步很重要。然后将sessionPreset设置为AVCaptureSessionPreset1920x1080,因为是要扫描微小型条形码,必须要提高图片输出质量,以此提高扫描成功率。一般的扫码使用AVCaptureSessionPreset640x480就够了。其次设置你要扫描的条码类型这里是AVMetadataObjectTypeCode128Code。

相关文章

  • iOS微小型条码的扫描

    之前做了一个功能,要求扫描二维码和微小型条码的扫描,微小型条码有多小,当客户一拿过来的时候我一脸蒙逼。条码高度就只...

  • 2019-06-03

    iOS二维码扫描//设置条码类型 ****.metadataObjectTypes =@[... - 简书

  • iOS 资源搜集 第二弹

    资源: github的资源整合 学习: swift学习oc中国 其他:原生实现扫描二维码条码- iOS原生实现扫描...

  • 新大陆发现数字世界,条码寻觅科技

    条码扫描器,又称为条码阅读器、条码扫描枪、条形码扫描器、条形码扫描枪及条形码阅读器。它是用于读取条码所包含信息的阅...

  • 使用条码枪读取二维码数据

    简介 条码扫描器,又称为条码阅读器、条码扫描枪、条形码扫描器、条形码扫描枪及条形码阅读器。它是用于读取条码所包含信...

  • 条形码扫描器的应用场景

    条形码扫描器、条码扫描器、智谷联条形码扫描器、ZKC条码扫描器 条码扫描技术近些年来在全球零售行业的普遍应用,在为...

  • 扫描枪枪扫描不出条码怎么办???

    扫描枪扫不出条码,首先要确定是扫描枪的问题还是条码的问题。比如说扫描枪可以出光但是就是不能扫描条码到电脑上,这有可...

  • 条码数据线的一些常见问题

    条码扫码器,又称为条码阅读器,条码扫描枪、条形扫描枪及条形阅读器。它是用于读取条码所包含信息的阅读设备,利用光学原...

  • SAP UI5 BarcodeScannerButton 的初始

    sap.ndc.BarcodeScannerButton:用于启动条码扫描过程的按钮控件(显示条码图标)。 如果本...

  • 一行代码调用Zxing的二维码解码功能

    在上一篇分析了google的Zxing条码扫描库的源码:分析google的Zxing条码扫描库源码这里提一下如何简...

网友评论

  • 心语风尚:扫描二维码与条码 代码区别是什么
    chilim:并没有什么区别。
    //设置条码类型
    output.metadataObjectTypes=@[AVMetadataObjectTypeCode128Code];
    看你的码是什么类型,可以设置支持哪些类型的编码

本文标题:iOS微小型条码的扫描

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