【iOS】——使用ZXingObjC库实现条形码识别并请求信息

news2024/12/31 5:16:11

文章目录

  • 前言
  • 一、实现步骤
  • 二、扫描界面和扫描框的样式
    • 1.扫描界面
    • 2.扫描框
  • 三、实现步骤


前言

ZXing库是一个专门用来解析多种二维码和条形码(包括包括 QR Code、Aztec Code、UPC、EAN、Code 39、Code 128等)的开源性质的处理库,而ZingObjC库是它的一个移植版本。由于博主还没有真机进行调试,所以舍去了使用摄像头的一些方法,仅实现其最终识别结果的方法。


一、实现步骤

使用ZXingObjC库完整的步骤分为以下六步:

  1. 为项目工程导入ZXingObjC库,可以在GitHub上直接搜索下载也可以使用Cocoa Pods进行安装
  2. 在需要使用ZXingObjC库的地方引入头文件#import <ZXingObjC/ZXingObjC.h>
  3. 创建扫描头,也就是创建一个 ZXCapture 对象,该对象负责管理扫描的整个过程。可以设置代理来接收扫描结果 self.capture = [[ZXCapture alloc] init]; self.capture.delegate = self;
  4. 配置扫描界面,可以设置扫描界面的样式和布局,例如扫描框的样式、扫描线的颜色等 self.capture.layer.frame = self.view.bounds; [self.view.layer addSublayer:self.capture.layer];
  5. 开始扫描:调用 ZXCapture 对象的 start 方法开始扫描 [self.capture start];
  6. 处理扫描结果:通过实现 ZXCaptureDelegate 协议中的方法来处理扫描结果。例如:
    - (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result { if (result) { NSString *contents = result.text; // 处理扫描到的内容 } }

二、扫描界面和扫描框的样式

1.扫描界面

  • 设置扫描界面的背景色:通过修改 capture.layer.backgroundColor 属性来改变扫描界面的背景颜色
  • 设置扫描线的颜色:通过修改 capture.layer.scanColor 属性来改变扫描线的颜色
  • 设置扫描线的样式:通过修改 capture.layer.scanLineStyle 属性来改变扫描线的样式,可选值包括线条、网格等。
  • 设置扫描区域的方向:通过修改 capture.camera 的 orientation 属性来设置扫描区域的方向,例如横向或纵向扫描
  • 设置扫描速度和精度:可以通过capture.rotation属性来设置扫描的速度和精度,值越大速度越快精度也就越低

2.扫描框

  • 设置扫描框的位置和大小:通过修改 capture.layer.scanRect 属性来设置扫描框的位置和大小,以相对于扫描界面的比例表示
  • 设置扫描框的颜色和边框:可以使用 UIView 来创建一个矩形视图,并设置它的背景色和边框样式来实现扫描框的外观。
  • 设置扫描框的角标样式:可以使用 CALayer 的 cornerRadius 和 borderWidth 属性来设置扫描框的角标样式。

三、实现步骤

这里我是用来实现识别以图片形式传入的条形码
实现解码的步骤总共分为以下这几步:

  1. 将传入的UIImage对象作为转换为成CGImageRef对象,然后使用 ZXCGImageLuminanceSource 创建一个 ZXLuminanceSource 对象来提供图像数据
  2. 使用 ZXHybridBinarizer 对象对图像进行二值化处理,创建一个 ZXBinaryBitmap对象用于后续的解码
  3. 创建一个 ZXDecodeHints 对象,用于配置解码器的选项。这里使用了默认的选项。然后创建一个 ZXMultiFormatReader****对象,用来条形码解码
  4. 最后,调用 decode: 方法对图像进行解码,返回解码结果ZXResult对象
- (NSString*)recognizeBarcodeInImage:(UIImage *)image {
    CGImageRef cgImage = image.CGImage;
    ZXLuminanceSource *source = [[ZXCGImageLuminanceSource alloc] initWithCGImage:cgImage];
    ZXBinaryBitmap *bitmap = [ZXBinaryBitmap binaryBitmapWithBinarizer:[ZXHybridBinarizer binarizerWithSource:source]];
    
    NSError *error = nil;
    ZXDecodeHints *hints = [ZXDecodeHints hints];
    ZXMultiFormatReader *reader = [ZXMultiFormatReader reader];
    ZXResult *result = [reader decode:bitmap hints:hints error:&error];
    
    if (result) {
        NSString *barcodeValue = result.text;
        NSLog(@"扫描到的条形码: %@", barcodeValue);
    } else {
        NSLog(@"条形码识别出错: %@", error);
    }
    return result.text;
}

下面是用解码的信息进行简单的网络请求

- (void)networkGetBarcodeData:(NSString*)querysData {
NSString *encodedString = [querysData stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"此处为API接口/%@", encodedString];
    NSURL* url = [NSURL URLWithString:urlString];
    NSURLRequest* request = [NSURLRequest requestWithURL:url];
    NSURLSession* session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
        completionHandler:^(NSData * _Nullable body , NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error == nil) {
            NSString *bodyString = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];
            NSDictionary *bodyDictionary = [NSJSONSerialization JSONObjectWithData:body options:kNilOptions error:nil];
            NSDictionary* dataDictionary = bodyDictionary[@"data"];
            //打印应答中的body
            NSLog(@"Response body: %@" , bodyString);
            NSString* brand = dataDictionary[@"trademark"];
            NSString* name = dataDictionary[@"goodsName"];
            NSLog(@"brand:%@", brand);
            NSLog(@"name:%@", name);
            NSString* medicineName = [NSString stringWithFormat:@"%@",  name];
            self.myBarcodeValue = medicineName;
            dispatch_async(dispatch_get_main_queue(), ^{
            self.medicineLabel.text = self.myBarcodeValue;
            });
        } else {
            NSLog(@"错误是%@",error);
        }

        }];
    
    [task resume];
}

运行结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1437604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源微服务平台框架的特点是什么?

借助什么平台的力量&#xff0c;可以让企业实现高效率的流程化办公&#xff1f;低代码技术平台是近些年来较为流行的平台产品&#xff0c;可以帮助很多行业进入流程化办公新时代&#xff0c;做好数据管理工作&#xff0c;从而提升企业市场竞争力。流辰信息专业研发低代码技术平…

点云transformer算法: FlatFormer 论文阅读笔记

代码&#xff1a;https://github.com/mit-han-lab/flatformer论文&#xff1a;https://arxiv.org/abs/2301.08739[FlatFormer.pdf] Flatformer是对点云检测中的 backbone3d部分的改进工作&#xff0c;主要在探究怎么高效的对点云应用transformer 具体的工作如下&#xff1a;一…

【C语言——打印乘法口诀表】

乘法表&#xff1a; 我们可以定义一个i控制行的变化&#xff0c;外加看上图的表得知我们需要用到循环结构&#xff0c;i是行需要不停的加加&#xff0c;因此&#xff0c;for循环比较好用&#xff0c;可以用两个嵌套的循环&#xff0c;外层循环即用到的i表示的是每一行的打印&am…

泰雷兹和Quantinuum推出入门套件,帮助企业为未来的后量子加密变革做好准备

•新的解决方案——PQC入门套件(PQC Starter Kit)为用户提供了一种快速、简便的方法&#xff0c;用于测试和衡量其在后量子时代防范量子计算攻击的准备情况 •随着量子计算逐渐成熟&#xff0c;企业为后量子时代做好准备并培养加密灵活性&#xff0c;对于降低数据泄露风险至关重…

BurpSuite测试上传文件xss漏洞教程

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;https://zhangxiaofan.blog.csdn.net/article/details/136061771 目录 目录 1.下载地址 Loader Keygen下载 Loader Keygen使用 2.Proxy SwitchyOmega代理 3.文件xss漏洞测试 启动…

游戏服务器多少钱一台?腾讯云32元,阿里云26元

游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选&#xff0c;可以选择轻量应用服务器和云服务器&#xff0c;阿腾云atengyu…

Jina AI 请回答 2023

年 度 回 顾 - Jina AI - 2023 年&#xff0c;正如它所对应的生肖“兔”&#xff0c;充满活力和智慧。AI 技术在全球范围内的颠覆性发展&#xff0c;让 2023 年成为大家公认的人工智能元年。作为从四年前成立起&#xff0c;就专注于多模态 AI 技术研发的前沿科技公司&#xff0…

年货大数据(年货节数据/电商行业数据):龙年再添两个黑马食品饮料品类,增长11倍!

年货零食三大件&#xff1a;牛奶、糖果和炒货。今年再多两大件&#xff0c;礼品卡券和腊味。 根据鲸参谋数据显示&#xff0c;今年坚果炒货、糖果、牛奶乳品、饮料等品类依然是长期的年货热门品类。1月前三周&#xff0c;牛奶乳品销量环比增长68%&#xff0c;销售额环比增长55…

【OpenVINO™】在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 (上篇)

在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 &#xff08;上篇&#xff09; 项目介绍 YOLOv5 是革命性的 "单阶段"对象检测模型的第五次迭代&#xff0c;旨在实时提供高速、高精度的结果&#xff0c;是世界上最受欢迎的视觉人工智能模型&#xff0c;代表了Ult…

《Git 简易速速上手小册》第1章:Git 基础(2024 最新版)

文章目录 1.1 Git 简介&#xff1a;版本控制的演变1.1.1 基础知识讲解1.1.2 重点案例&#xff1a;协作开发流程优化案例&#xff1a;功能开发与分支策略 1.1.3 拓展案例 1&#xff1a;代码审查与合并1.1.4 拓展案例 2&#xff1a;冲突解决 1.2 安装和配置 Git&#xff1a;首次设…

一文搞懂MOS管!

MOS管 1.原理 金属-氧化物半导体场效应晶体管 G&#xff1a;gate 栅极&#xff1b;S&#xff1a;source 源极&#xff1b;D&#xff1a;drain 漏极 P沟道型和N沟道型管&#xff08;箭头指向G极的是N沟道&#xff09; 增强型管&#xff1a;栅极-源极电压 Vgs 为零时Ids电流…

JavaScript基础第三天

JavaScript 基础第三天 今天我们学习for循环、while循环、终止循环和无限循环。 1. for 循环 1.1. 语法 // 1. 语法格式 // for(起始值; 结束条件; 累加器) { // // 要重复执行的代码 // }1.2. 示例代码 let sum 0; for (let i 0; i < 100; i) {sum i; } alert(&q…

Facebook的数字安全使命:社交平台的责任

在数字化的时代&#xff0c;社交媒体已经成为人们生活不可或缺的一部分&#xff0c;而数字安全问题也随之成为社交平台亟待解决的挑战。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅肩负着连接世界的使命&#xff0c;更担负着保障用户数字安全的责任。本文将深入研…

基于 SpringBoot 和 Vue.js 的权限管理系统部署教程

大家后&#xff0c;我是 jonssonyan 在上一篇文章我介绍了我的新项目——基于 SpringBoot 和 Vue.js 的权限管理系统&#xff0c;本文主要介绍该系统的部署 部署教程 这里使用 Docker 进行部署&#xff0c;Docker 基于容器技术&#xff0c;它可以占用更少的资源&#xff0c;…

Prompt Engineering实战-构建“哄哄模拟器”

目录 一 背景 二 “哄哄模拟器”的Prompt Prompt 的典型构成 三 操作步骤 3.1 创建对话 3.2 游戏测试 一 背景 前几天《AI 大模型全栈工程师》第二节课讲了“Prompt Engineering&#xff0c;提示工程”&#xff0c;里面提到一些prompt相关的技巧&#xff0c;原则&#xf…

书客、孩视宝、松下大路灯怎么选?耗费30天对比揭秘热门大路灯!

现如今&#xff0c;随着人们的生活水平在不断提高&#xff0c;科技人才以及学生人群的压力也越来越大&#xff0c;长时间的工作和学习&#xff0c;眼睛也面临着巨大的压力&#xff0c;导致一系列眼睛疲劳、酸痛、视力下降的情况发生&#xff0c;这时用眼必备的照明神器——大路…

《Java程序设计》实验报告(三)之常用类和集合类

实验内容及步骤&#xff1a; 编写String类的程序。&#xff08;1&#xff09;代码&#xff1a; public class TeatString3 { public static void main(String[] args) { String str"abcd"; System.out.print("将字符串转换为字符数组后…

web 前端实现一个根据域名的判断 来显示不同的logo 和不同的标题

1.需求 有可能我做一个后台 web端 我想实现一套代码的逻辑 显示不同的公司主题logo以及内容&#xff0c;但是实际上 业务逻辑一样 2.实现 建一个store oem.ts 这个名为是 oem系统 oem.ts import { defineStore } from pinia;import { store } from /store;const oemDataLis…

[每周一更]-(第85期):NLP-实战操作-文本分类

NLP文本分类的应用场景 医疗领域 - 病历自动摘要&#xff1a; 应用&#xff1a; 利用NLP技术从医疗文档中自动生成病历摘要&#xff0c;以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类&#xff1a; 应用&#xff1a; 使用文本分类技术自动分类法律文件&#xf…

开源软件:引领技术创新、商业模式与安全的融合

序 在信息技术日新月异的今天&#xff0c;开源软件以其独特的魅力和影响力&#xff0c;正逐渐成为软件产业的新常态。开源软件的低成本、高度可协作性和透明度等特点&#xff0c;不仅吸引了无数企业和个人用户的青睐&#xff0c;更为软件行业带来了前所未有的繁荣景象。 一、…