Tag: qr code

如何正确编写扫描QR码的ViewController

让我们编写一个解耦的代码,通过使用组合甚至可以测试我们的ViewController! 😱 当我不得不编写QR码扫描仪应用程序时,我以前从未使用过AVFoundation。 因此,我遵循了通常的脚本:我阅读了一些文档,阅读了一些教程并将学习的内容应用于我的需求。 通用方法的问题在于,它使ViewController符合另一种协议。 因此,它增加了另一个责任! 我将以一个简单的应用程序为例,向您展示一种更好的方法。 第一个ViewController需要一种使用摄像机捕获视频并显示在此辣味混合框中捕获的内容的方法。 另外,当用户将相机指向QR码时,它需要解释并解码其值。 之后,它可以停止捕获视频。 AVFoundation助我们一臂之力! AVFoundation 尽管QR代码已经很老了,但是直到iOS 7才有了AV Nativeation的巨大改进,我们没有在iOS上读取它们的原生方法。 现在,这是在iOS上实现代码读取器的最简单方法! 它具有我们完成此任务所需的所有功能。 AVCaptureDevice Input负责捕获视频。 AVCaptureVideo 预览层,用于显示实时视频。 AVCaptureMetadata 输出是将解释和解码QR码的输出。 AVCapture Session可以管理输入和输出之间的数据流。 我将所有这些逻辑包装在名为AVCodeReader的类中。 它的界面由两个函数和一个属性组成。 该函数开始读取QR码并使用转义闭包来通知何时解码值。 另一个停止使用相机资源。 还有CALayer属性,其中包含正在捕获的视频。 定义AVCodeReader接口的协议 AVCodeReader 我使用init来设置前面提到的所有AVFoundation类。 https://github.com/danielCarlosCE/aguente/blob/master/Aguente/Model/Implementation/AVCodeReader.swift 首先要记住的是,该设备(如模拟器)可能没有摄像头。 您必须决定接下来会发生什么。 我选择不破坏应用程序,而是选择一个空的videoPreview和一个nil captureSession 。 现在,它可以在不为captureSession时使用captureSession启动和停止读取QR码。 https://github.com/danielCarlosCE/aguente/blob/master/Aguente/Model/Implementation/AVCodeReader.swift 请注意,我将completion闭包分配给didRead属性,因此可以从另一个函数调用它。 要用作输出的委托,它必须符合AVCaptureMetadataOutputObjectsDelegate 。 该协议需要NSObjectProtocol ,因此我将类NSObject的子类。 https://github.com/danielCarlosCE/aguente/blob/master/Aguente/Model/Implementation/AVCodeReader.swift ReaderViewController 承诺是写一个解耦的代码! 让我们看看ViewController的样子。 https://github.com/danielCarlosCE/aguente/blob/master/Aguente/Controller/ReaderViewController.swift 尽管ViewController不知道如何扫描QR码,但它具有依赖关系。 由于在使用情节提要时不能使用构造函数注入,因此我在此处使用了强制展开属性。 因此,如果有人在调用此视图之前忘记设置依赖项,则应用程序将崩溃! 请注意,我不仅要添加videoPreview图层,而且还要在视图布局其子视图时对其进行更新,因为在viewDidLoad尚未设置自动布局的约束。 […]

如何在iOS中生成QR码

生成QR码可能是一个小问题,但知道如何在手机上生成QR码而不是仅使用手机的摄像头扫描QR码就很好了,并且生成它们非常容易。 让我们看一个简单的示例,在该示例中,我们基于字符串创建QR代码,此外,我们还将通过向其添加一些颜色来对其进行一些自定义。 首先,让我们创建UIView的子类,以便我们能够轻松地将QR代码放置在应用程序中所需的位置。 因此,这是我们为实现此结果所做的工作。 为了纠正图像模糊的问题,我们应用了一个变换滤镜,并将缩放比例提高了十倍。 您可能想修改一下它而不牺牲任何性能,使用10的比例随机说明该方法的工作原理。 要设置所需的颜色值,我们需要反转颜色,然后对图像进行遮罩,以使背景变得透明。 对于反转,我们使用另一个名为CIColorInvert的CIFilter 。 这只是反转了由CIQRCodeGenerator生成的黑色和白色的颜色。 该过滤器的输入是转换后的图像,我们使用键kCIInputImageKey ,在进行遮罩时也会看到该键被使用。 现在我们有了一个反转的图像,是时候应用遮罩了。 对于屏蔽,我们使用名为CIMaskToAlpha的过滤器。 就像反转过滤器一样,它也使用相同的键kCIInputImageKey将图像作为输入。 现在,我们完成了一个过滤器。 现在是时候将这些碎片放到位了。 首先,我们为图像视图设置色调颜色,这将是实际代码的颜色。 我们继续为实际的图像视图设置背景色; 当我们对图像应用Alpha滤镜时,这将作为代码的背景色。 最后一点,是时候将生成的图像设置为图像视图了。 因为我们正在使用Core Image框架,所以我们还没有UIImage。 对我们来说幸运的是,UIImage作为接受CIImage的初始化程序。 锦上添花的是,当您将UIImage设置为UIImageView时,可以通过添加.withRenderingMode(.alwaysTemplate) 。 最后一步很重要,因为它将使图像采用图像视图的色调。 就在那里 现在,您可以生成自己的QR码并通过在其上划线颜色方案来对其进行个性化设置。

使用Swift使用自定义徽标和颜色生成QR码

QR代码用于在Twitter和Snapchat等应用中共享内容或添加新用户。 从iOS 11开始,用户可以使用内置的相机应用程序扫描QR码。 这使得在您自己的应用程序中集成QR码变得更好。 在iOS中生成QR码 自从引入CIQRCodeGenerator核心图像过滤器以来,在iOS中生成QR代码比以往任何时候都容易。 它为给定的输入字符串生成纯黑白QR码。 guard let qrFilter = CIFilter(name: “CIQRCodeGenerator”) else { return nil } let qrData = absoluteString.data(using: String.Encoding.ascii) qrFilter.setValue(qrData, forKey: “inputMessage”) let qrTransform = CGAffineTransform(scaleX: 12, y: 12) let qrImage = qrFilter.outputImage?.transformed(by: qrTransform) 这个QR代码已经可以使用了,但它并不是很吸引人,并且可能与您自己的应用程序的出色设计不一致。 因此,如果我们可以对其进行自定义以适合我们的应用程序设计,那就太好了。 更改QR码的颜色 定制QR码的第一步是更改颜色。 我们分三个步骤进行操作: 反转黑白颜色 将黑色遮罩为透明 改变颜色 为了使此代码更易于使用,我们在CIImage上创建了一个扩展。 extension CIImage { /// Inverts the colors and […]

ZXingObjc集成IOS,但根本没有工作

我已经集成了ZXingObjc框架和ViewController作为RootViewController 。 ViewController.m的代码如下所示: #import <AudioToolbox/AudioToolbox.h> #import "ViewController.h" @interface ViewController () @property (nonatomic, strong) ZXCapture *capture; @property (nonatomic, weak) IBOutlet UIView *scanRectView; @property (nonatomic, weak) IBOutlet UILabel *decodedLabel; @end @implementation ViewController #pragma mark – View Controller Methods – (void)dealloc { [self.capture.layer removeFromSuperlayer]; } – (void)viewDidLoad { [super viewDidLoad]; self.capture = [[ZXCapture alloc] init]; self.capture.camera = self.capture.back; […]

OBJ。 C – QR阅读应用程序运行速度太慢

我在这个网站上通过教程(Appcoda的教程),用AVFoundation制作了一个QR码阅读应用程序。 阅读QR码后,该应用程序显示一个UIAlertView。 但是花了近2分钟(有时超过3分钟)。 我将在这里粘贴整个ViewController.m文件。 我希望这已经足够了。 (UIAlertView在captureOutput方法中) // // ViewController.m // Yuvio // // Created by İhsan Batuğhan YILMAZ on 29/08/15. // Copyright © 2015 Farabius. All rights reserved. // #import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController () @property (nonatomic) BOOL isReading; @property (nonatomic, strong) AVCaptureSession *captureSession; @property (nonatomic, strong) AVCaptureVideoPreviewLayer *videoPreviewLayer; -(BOOL)startReading; -(void) stopReading; @end @implementation […]

用AVCaptureSession在iOS上读取QRCodes – alignment问题?

我们在iOS中使用AVCaptureSession类实现了QRCode读取function,如下所述: https://github.com/HEmobile/ScanBarCode/tree/master/ScanBarCodes https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVCaptureSession_Class/ 但是我们注意到一件事… QRCode必须完全垂直或水平alignment。 诸如45度的倾斜angular度不会触发扫描。 这个问题真的不是谷歌,这是令人惊讶的。 我们的其他QR码阅读应用程序的实验表明,这种限制不存在。 也许/看起来(可能 – 因为内置函数是新的)这些应用程序不使用AVCaptureSession。 我们的问题是,这是一个标志,苹果的这个function的版本还不成熟吗? 还是有一些选项来启用或改善这种能力? 感谢您的任何想法。

如何从zbar获取代码的types?

在我的应用程序Zbar解码完美。 但问题是Zbar可以解码QR码和条码。 所以解码后如何获得编码风格的types? 提前致谢

如何从iOS中使用UIImagePickerController选取的图像扫描Qr代码

我能够使用相机扫描qr代码,而无需使用任何外部库(如ZBAR或ZXING)。 现在我真正想要的是让用户上传照片库中的图像,并获取从上传的图像扫描的qr代码。 我知道如何使用UIImagePickerController(之前使用过)。 我想问的是,如何从上传的图像扫描qr码(不使用相机) 你可以build议一些代码(.h / .m文件),我可以在我的项目中添加。 请不要向我推荐任何外部库,如ZBAR或ZXING。

iOS中的各种条形码阅读器免费SDK

我正在制作一个免费的条形码阅读器应用程序。 我正在寻找免费的SDK来解码Datamatrix,QR,Aztec,UPC,EAN条码。 按照现在我已经实现了ZBar SDK。 它能够成功检测QR,UPC和EAN。 我testing了这个链接 zbar和 ZXingOBjC 但是这些都无法正确检测到阿兹台克人。 与数据matrix,UPC,EAN和QR我发现Redlaser非常有效,但现在它不是免费的。 现在,有没有免费的SDK可以检测所有四个条形码没有付费,因为我想保持我的应用程序在应用程序商店免费。 请build议 PS我想扫描仪与最新的iOS可用的兼容性。

iOS:ZBar SDK unicode字符

使用ZBar扫描QR码时,由该过程产生的string不能正确显示Unicode字符。 任何自由使用二维码生成器(如http://qrcode.kaywa.com )编码为QR码的词Márti将导致Mテ.rti 。 在其他SO问题( 1,2 )中,build议在结果string的开始处embeddedBOM,但是这样做: NSString *qrString = [NSString stringWithFormat:@"\xEF\xBB\xBF%@",symbol.data]; 或这个: NSString *qrString = [[NSString alloc] initWithFormat:@"\357\273\277%@", symbol.data]; 导致了与亚洲人相同的,有缺陷的结果。 symbol.data是由ZBar提供的结果NSString。 更新:基于达达的答案,解决scheme如下: NSString *qrString = symbol.data; //look for misinterpreted acute characters and convert them to UTF-8 if ([qrString canBeConvertedToEncoding:NSShiftJISStringEncoding]) { qrString = [NSString stringWithCString:[symbol.data cStringUsingEncoding: NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding]; }