ios扫码应用总结

本文总结了在iOS平台上使用AVFoundation库开发原生扫码应用的经验,包括使用AVCaptureStillImageOutput捕获图像并保存,以及解决快门声音问题。同时,讨论了在结果页显示扫描图像的两种策略,并提供了实现细节和代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ios扫码应用总结

写了一个ios的关于扫码的应用,虽然简单,但是细节还是不少,写在这里,做一些总结,也提供给其他朋友作参考。

先来个界面看看:

先来个界面

1.本项目使用的是ios自带的AVFoundation库实现的扫码,没有导入任何第三方扫码库;
2.增加了捕获当前扫码图像的功能;
3.必须真机调试,否则崩溃;
4.上传的代码只有扫码部分,扫描结果页,其他模块未上传过,包含手动输入条形码,扫码结果页,列表页等,猿类自行增加吧;

细节:
1.扫描图像捕捉的实现,好多应用要实现扫描后可以把当前的扫描图保存起来,怎么弄呢?我的实现方式是使用AVCaptureStillImageOutput,在扫描完成后,获取当前的扫描图像,具体代买如下:

//初始化
stillImageOutput = [[AVCaptureStillImageOutput alloc]init];
    NSDictionary* outputSettings = @{AVVideoCodecKey:AVVideoCodecJPEG};
    [stillImageOutput setOutputSettings:outputSettings];
    if ([self.session canAddOutput:stillImageOutput]) {
        [self.session addOutput:stillImageOutput];
    }

//以下代码在扫描结果方法captureOutput中调用
AVCaptureConnection *myVideoConnection = nil;

                //从 AVCaptureStillImageOutput 中取得正确类型的 AVCaptureConnection
                for (AVCaptureConnection *connection in stillImageOutput.connections) {
                    for (AVCaptureInputPort *port in [connection inputPorts]) {
                        if ([[port mediaType] isEqual:AVMediaTypeVideo]) {
                            myVideoConnection = connection;
                            break;
                        }
                    }
                }

                NSString* fileName = @"保存图像的名字";

                //撷取影像(包含拍照音效)
                [stillImageOutput captureStillImageAsynchronouslyFromConnection:myVideoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {

                    //完成撷取时的处理程序(Block)
                    if (imageDataSampleBuffer) {
                        NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
                        NSString* filePath = [NSString stringWithFormat:@"%@/%@.jpg",[iTools getDocumentDirectory],fileName];
                        //写文件到本地

                    }
                }];

问题:
使用AVCaptureStillImageOutput获取图像有一个问题,就是会有快门声,如果你觉得快门声烦人,那建议采取另外一种方式,AVCaptureVideoDataOutput,视频流的方式进行截取,想尝试的同学自行实行吧;

2.结果页要用UIImageView显示扫描的图像,因为扫描图一般都是竖屏的,但是二维码要显示中间的正方形,两种方案,
(1)截图,将中间部分截取出来保存;
(2)UIImageView属性设置成Aspect Fill,但是刚开始一直得不到想要的结果,多余的图像无法实现遮罩,后来发现少了一个参数,self.titleImage.clipsToBounds = YES,设置clipsToBounds后完美解决;

上代码:demo下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值