扫描二维码创建

创建基于PowerApps的条码和二维码扫描应用 Microsoft Azure Cognitive Services是一套云端API服务,提供开发者以构建智能应用程序。这些服务架构基于机器学习模型,使得应用程序能够感知环境、理解内容、做出决策并交流。优势包括:易于集成:开发者可以利用REST API或SDK快速集成功能到应用中,无需深入机器学习知识。可扩展性:服务是云基础的,可以轻松扩展以满足高流量需求。多语言支持:提供多种语言支持,便于全球开发者使用。持续更新:随着时间的推移,服务通过学习不断改善。 阅读详情

二维码创建.zip

752372-20160427154405673-1702784015.png

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import "WebViewController.h" //创建webview

static const char *kScanQRCodeQueueName = "ScanQRCodeQueue"; //自定义线程的名字

@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>

@property (weak, nonatomic) IBOutlet UIView *sanFrameView; //扫描窗口

@property (weak, nonatomic) IBOutlet UIButton *lightButton; //灯按钮

@property (weak, nonatomic) IBOutlet UIButton *captureButton; //开始扫描按钮

@property (nonatomic) AVCaptureSession *captureSession; //会话,用于添加输入流和输出流
@property (nonatomic) AVCaptureVideoPreviewLayer *videoPreviewLayer; //输出对象
@property (nonatomic) BOOL lastResult;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    /**
     基本逻辑:
     扫描二维码,将扫描到的网址二维码直接扔到webview中进行显示
     */

    [self.lightButton setTitle:@"打开照明" forState:UIControlStateNormal]; //设置灯按钮的初始状态
    [self.captureButton setTitle:@"开始" forState:UIControlStateNormal]; //设置扫描按钮的状态
    self.lastResult = YES; //初始化判断

}

#pragma mark **************扫描部分 begin*****************
#pragma mark 扫描按钮点击事件
- (IBAction)captureButtonClick:(UIButton *)sender {

    if ([self.captureButton.titleLabel.text isEqualToString:@"开始"]) {
        [self startReading];
    } else {
        [self stopReading];
    }
}


#pragma mrak 开始扫描方法
- (BOOL)startReading {

    [self.captureButton setTitle:@"停止" forState:UIControlStateNormal];

#pragma mark 获取设备实例
    NSError *error;
    AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

#pragma mark 创建会话
    self.captureSession = [[AVCaptureSession alloc] init];

#pragma mark 创建输入流
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];
    //如果设备输入流不存在,直接返回
    if (!input) {
        NSLog(@"%@",[error localizedDescription]);
        return NO;
    }

    [self.captureSession addInput:input]; //会话添加输入流

#pragma mark 创建输出流
    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
    [self.captureSession addOutput:output]; //会话添加输出流

#pragma mark 添加输出代理,用于接收输出的数据
    dispatch_queue_t dispatchQueue = dispatch_queue_create(kScanQRCodeQueueName, NULL);
    [output setMetadataObjectsDelegate:self queue:dispatchQueue];

#pragma mark 设置输出的元数据类型 AVMetadataObjectTypeQRCode 二维码类型
    [output setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]];

#pragma mark 根据会话设置创建输出对象
    self.videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
    [self.videoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
    self.videoPreviewLayer.frame = self.sanFrameView.layer.bounds;
    [self.sanFrameView.layer addSublayer:self.videoPreviewLayer];
    //设置完成,开始会话
    [self.captureSession startRunning];

    return YES;
}

#pragma mark 停止扫描方法
- (void)stopReading {
    [self.captureButton setTitle:@"开始" forState:UIControlStateNormal];
    [self.captureSession stopRunning];
    self.captureSession = nil;
}

#pragma mark 输出流代理方法
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {

    if (metadataObjects != nil && metadataObjects.count) {

        AVMetadataMachineReadableCodeObject *metadataObject = [metadataObjects objectAtIndex:0];
        NSString *result;
        if ([[metadataObject type] isEqualToString:AVMetadataObjectTypeQRCode]) {
            result = metadataObject.stringValue;
        } else {
            NSLog(@"不是二维码");
        }
        //将结果带到主线程,进行确认
        [self performSelectorOnMainThread:@selector(outputResult:) withObject:result waitUntilDone:NO];
    }
}

#pragma mark 接收扫描的内容
- (void)outputResult:(NSString *)result {

    [self stopReading]; //得到结果,结束读取
    if (!_lastResult) {
        return;
    }

    NSLog(@"result = %@",result);
    _lastResult = NO;

#pragma mark 创建一个警告controller
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"二维码扫描" message:result preferredStyle:UIAlertControllerStyleAlert];
#pragma mark 创建取消按钮
    UIAlertAction *concelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];

#pragma mark 添加一个确认按钮 实现按钮的点击事件
    UIAlertAction *getAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

        WebViewController *webview = [[WebViewController alloc] init];
        webview.url = result;
        [self.navigationController pushViewController:webview animated:YES];

        NSLog(@"将内容推出去");
    }];
    [alertController addAction:concelAction]; //添加取消按钮
    [alertController addAction:getAction]; //添加确认按钮
#pragma mark 模态视图出现
    [self presentViewController:alertController animated:YES completion:nil];

    _lastResult = YES;
}

#pragma mark **************扫描部分 end*******************

#pragma mark **************灯 begin*******************
#pragma mark 灯按钮的点击事件
- (IBAction)lightButtonClick:(UIButton *)sender {

    if ([self.lightButton.titleLabel.text isEqualToString:@"打开照明"]) {
        [self systemLightSwith:YES];
    } else {
        [self systemLightSwith:NO];
    }

}

#pragma mark 灯触发事件
- (void)systemLightSwith:(BOOL)open {

    //改变按钮的状态
    if (open) {
        [self.lightButton setTitle:@"关闭" forState:UIControlStateNormal];
    } else {
        [self.lightButton setTitle:@"打开照明" forState:UIControlStateNormal];
    }

    //获取当前的设备
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    //如果存在设备,设置
    if ([device hasTorch]) {
        [device lockForConfiguration:nil];

        if (open) { //打开
            [device setTorchMode:AVCaptureTorchModeOn];
        } else { //关闭
            [device setTorchMode:AVCaptureTorchModeOff];
        }

        [device unlockForConfiguration];
    } else {
        NSLog(@"不存在照明设备");
    }

}
#pragma mark **************灯 end*******************

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
1.3-----Simplify 3D切片软件:从新手困惑到高效打印的进阶设置指南 本文详细介绍了Simplify 3D切片软件在大型模型打印中的高效设置技巧,包括切片效率、支撑结构智能生成和精细参数调节等核心优势。通过实战案例和进阶参数设置指南,帮助用户从新手快速进阶到高效打印,显著提升3D打印质量和效率。 阅读详情

相关推荐

网格自适应_Comsol案例解析17:自适应网格的使用

本期导读自适应网格细化有许多优势,比如可以不用对网格进行全局加密,增加计算精度,又会降低求解自由度。本期仍然以气泡上升案例为例,在两相流模块中使用自适应网格。【打开案例模型】【修改网格】适当让气泡边界加密,注意,曲率因子越小,曲线上的网格越密【添加自适应网格】使用默认的参数即可,这里的误差指示器用的是水平集phi。可以根据具体求解模型选择适当的自变量作为误差指示器。【口诀】默认的一般是最...

weixin_28726871的博客 5681

http: server gave HTTP response to HTTPS client

docker出现一下错误; Error getting v2 registry: Get https://10.27.1.55:8887/v2/: http: server gave HTTP response to HTTPS client 看这个错误我真的以为是没加 --insecure-registry 10.27.1.55:8887 导致的 看看我的sys

zhao4471437的博客 7376

基于结构的虚拟筛选模型 gnina 从源码编译

所需要的软件安装包: 安装 CUDA 装的时候看着点,第二个要你装驱动的选择,回答N,不装。 sudo sh cuda_10.0.130_410.48_linux.run sudo vim ~/.bashrc 在 ~/.bashrc 文件最后加上 export PATH=/usr/bin:/usr/local/cuda-10.0/bin${PATH} export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH} source ~

周迪新的博客 3187

iOS开发之直播App流程介绍,直播资料收集汇总,视频推流,视频拉流,SMTP、RTMP、HLS、 PLPlayerKit

(一) iOS 直播类APP开发流程分解:  1 . 音视频处理的一般流程: 数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示 1、数据采集: 摄像机及拾音器收集视频及音频数据,此时得到的为原始数据 涉及技术或协议: 摄像机:CCD、CMOS 拾音器:声电转换装置(咪头)、音频放大电路 2、数据编码: 使用相关硬件或软件对音视频原始数据进行编码处理(

zhonggaorong的专栏 2万+

三极管自激升压电路设计 - 从参数计算到实践验证

本文详细解析了三极管自激升压电路(焦耳小偷电路)的设计原理与实践方法。通过剖析自激振荡机制与三极管电流关系,指导读者完成从核心参数计算、关键元件选型到面包板搭建调试的全过程。文章重点阐述了如何利用电感、三极管等基础元件实现低压直流到高压的转换,是理解开关电源与电磁能量转换的绝佳实践项目。

weixin_29250573的博客 366

盘点军工行业软件研发的那些常用GJB标准

GJB5000、2786、438、141、102、8114等...

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 9439

keepavlied一些参数

priority 表示优先级 virtual_ipaddress 虚拟的IP地址(VIP) delay_loop 每个2秒检查一次real_server状态 notify_down 检测到服务down后执行的脚本 connect_timeout 连接超时时间 nb_get...

weixin_30832405的博客 172

java链接opc报异常org.jinterop.dcom.common.JIException: Access is denied解决

记录一下这次从发现问题到解决问题的过程 项目是通过java链接OPC,读取数据,并且发送数据的 程序一直运行正常,最近客户反馈说无法读取数据,通过查看,发现访问异常了。花了2天的时间才解决了这个异常。 org.jinterop.dcom.common.JIException: Access is denied, please check whether the [domain-username-password] are correct. Also, if not already done please c

机器学习菜鸟 1万+

使用Python创建和扫描二维码

本文展示如何使用Python创建和扫描二维码。

Eiceblue的专栏 1013

OpenClaw对接本地大模型:Llama3/Qwen/ChatGLM全适配,完全私有化部署

OpenClaw对接本地大模型,是企业级AI智能体落地的必经之路——它不仅解决了数据隐私和合规问题,还能大幅降低成本、提升响应速度、实现定制化。这篇文章我给大家完整拆解了两套部署方案:Ollama(新手首选,5分钟搞定)和vLLM(生产环境首选,高性能),覆盖了Llama3/Qwen/ChatGLM三大主流模型,还有真实的落地案例、高级优化、踩坑避坑指南,看完你就能零代码完成完全私有化的部署。从零开发自定义工具,给OpenClaw添加专属业务能力;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 808

手机银行应用架构设计

网上银行借助互联网、移动通信网络等技术向客户提供金融服务,易受到通讯层面的安全威胁,金融机构应从通讯协议、安全认证、通信链路安全等层面,采取措施有效应对相关风险。网上银行系统服务器端提供网上银行应用服务和核心业务处理功能,金融机构应充分利用物理环境、通信网络、计算环境等领域的防护技术,在攻击者和受保护的资源间建立多道严密的安全防线。 网上银行除直接向用户提供金融服务外,也可能与外部机构开展业务合作。在网上银行系统设计、开发、部署和运营过程中,应充分考虑外部机构的系统可能存在的安全风险,并针对各类风险进行有效

银行信息系统应用架构详解 4828

Android zxing创建和扫描二维码

1.在项目的libs目录下添加zxing.jar包,并在build中引用 implementation files('libs/zxing.jar') 2.在AndroidManifest.xml文件中添加权限 <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

yyxhzdm的博客 532

肖特基二极管的反向恢复过程

本博客简述肖特基二极管反向恢复过程。

记得诚 1万+

二维码创建及扫描

  昨天为大家介绍了一种二维码的创建策略,在测试中发现生成的二维码属于通讯二维码,通过微信、UC浏览器扫描,均为取得成功,通过小米手机自带的二维码扫描,可以正确解析二维码中的信息,并且可以一键导入到通讯录,不太清楚这是什么原因,对于制作二维码电子名片非常方便,大家可以了解一下。本篇我将结合ZXing为大家介绍如何制作二维码,和扫描二维码并进行解析。   ZXing是一个开源Java类库用于解析多...

weixin_34378767的博客 134

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

扫描和创建二维码

1、首先导入libzxing这个包并且关联这个包     一、扫描二维码先写布局    <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/start" android:text="开始扫描"/> <TextVie

zhoumin1223的博客 298

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

具身智能“四朵云”:走了半步,如何补全物理闭环?

具身智能强调机器人在物理环境中的感知-决策-执行闭环,与云端大模型存在本质差异。当前云端方案多聚焦算力、仿真或API,却缺乏对实时控制与物理反馈的支撑,常被称为“走了半步”。本文梳理了四朵云形态(训练云、仿真云、操控云、模型API云)的后程瓶颈,提出端边云三层协同架构,强调端侧实时控制、云端重计算的分工,并给出时延、控制频率、数据回传和故障降级等关键选型指标。通过最小闭环验证方法,帮助开发者判断云端具身方案是否值得投入。真正补全后半步,需要云平台与硬件、操作系统、边缘设备共同协作,并沉淀行业场景模板,才能从

weixin_33859231的博客 430

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android使用ZXing实现二维码的扫描和创建

一、引用依赖 1、zxing 生成二维码的依赖 implementation 'com.google.zxing:core:3.3.3' implementation 'com.journeyapps:zxing-android-embedded:3.6.0' 2、zxing 扫码二维码依赖 implementation 'pub.devrel:easypermissions:1.0.1' implementation 'cn.bingoogolapple:bga-photopicker:1.2

qq_19688207的博客 4298

ZXing扫描二维码、创建二维码

目前可以: 根据字符串创建二维码 用法:CreateCodeUtil.getInstance().createQRcodeImage("aaa",imageView); 新增自定义扫描框颜色和提示词 用法:需要跳转的Activity使用Bundle,name分别为COLOR和TEXT 扫描结果在需要返回的acticity的onActivityResult中requestCode为996 使用方法: allprojects { repositories { ... maven {

weixin_43184171的博客 305

二维码扫描、创建

https://github.com/DaiUsers/QRcode

Hello_World_daifage的博客 450

使用 HTML, CSS 和 JavaScript 创建一个二维码扫描器

本文介绍如何开发一个纯前端的二维码扫描器应用。该应用通过浏览器访问用户摄像头,利用html5-qrcode库实时扫描二维码,并提供结果显示和复制功能。教程涵盖HTML结构搭建、CSS样式设计和JavaScript逻辑实现,包括摄像头权限请求、视频流处理、扫描结果解析等核心功能。项目采用响应式设计,适合巩固前端基础技术,并深入理解WebRTC和第三方库集成。读者需具备HTML/CSS/JavaScript基础,最终将实现一个包含视频预览、扫描结果展示和控制按钮的完整应用。

weixin_42107409的博客 1064

uniApp 实现二维码扫描

在pages目录下创建一个用于扫描二维码的页面,如scanCode.vue。用户点击 “扫描二维码” 按钮后,会打开系统的扫码界面,扫描成功后会在控制台输出二维码的内容。

虎康的博客 2882

使用 Swift 3 与 Xocde 8 创建条码与二维码扫描应用

作者:Simon Ng,原文链接,原文日期:2016-11-02译者:小锅;校对:saitjr;定稿:CMB 那么,什么是二维码呢?我相信读者中的大多数都知道什么是二维码(译者注:我觉得应该是全部都知道吧)。以防还有读者没有听说过二维码,可以看一下上面这张图片(译者注:原文如此,并且原文中也没有图片)——那就是二维码。 二维(QR 全称是...

weixin_34100227的博客 247

使用 Swift 创建简单的二维码扫描应用

排着长队等待结账的商店,帮助旅客记录包裹和航班信息的机场,帮助大型零售商处理大量无聊的存货清单,这些场景非常适合使用条码扫描器。此外,条码扫描器也能帮消费者进行智能购物和...

哲洛不闹的专栏 323

使用CAShapeLayer实现扫描二维码界面

CAShapeLayer简介 实现扫描界面 awakeFromNib代码说明 效果展示 之前写过一篇利用AVCaptureSession扫描二维码的博客,但是那个页面是全屏的,在实际应用中,一般都是中间有一个框,然后二维码对准中间框的时候才能识别。这是怎么实现的呢,经过查找资料,现将方法纪录,供日后查阅。 CAShapeLayer简介关于CAShapeLayer的介绍网上有很多,我就引用一段吧。

人生如梦 1098

C++/QT生成二维码和扫瞄二维码

C++/QT生成二维码和扫码二维码

weixin_41560737的博客 4614
上一篇: 应用内调用邮箱/拨号/短信/浏览器/应用商店
下一篇: 向下拉伸tableview头图的发生尺寸
瓦怕落地
博客等级 码龄11年 16粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值