iOS 原生生成二维码 - 怎么在iOS中使用CIFilter生成一个二维码

 二维码的生成

生成一个二维码也就是根据提供的数据内容转换成一张二维码图像。从iOS 7开始,我们只需要使用CIFilter中的CIQRCodeGenerator就可以轻易实现。只不过这样生成的二维码图像是一个CIImage对象,如果要在图像视图中显示,需要将其转换为UIImage对象。具体步骤如下:

①、使用名为 CIQRCodeGenerator 的过滤器创建一个CIFilter对象。

CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]

②、为CIFilter对象设置 inputMessage 和 inputCorrectionLevel 参数。

inputMessage :是一个NSData对象,用于表示被编码的数据。对于字符串或者URL,需要使用NSISOLatin1StringEncoding字符串编码将其转换为NSData对象。要注意的是,NSISOLatin1StringEncoding编码对于中文或表情无法生成,需要的话可以使用NSUTF8StringEncoding 替换。

inputCorrectionLevel :是一个NSString对象,通常使用单个字母来指定纠错率,默认值是 M 。该参数控制输出图像中编码的附加数据量以提供纠错。其纠错率越高,输出的图像越大,同时也允许代码的更大区域被破坏或模糊。通常有 L 、 M 、 Q 、 H 这四种可能的纠正模式,分别代表了7%、15%、25%、30%的错误恢复能力。

③、使用CIFilter对象的 outputImage 属性获取生成的二维码图像

CIImage *outputImage = filter.outputImage;

④、对生成的二维码图像进行缩放。

由于生成的二维码图像尺寸一般都比较小,为了避免模糊,通常需要对它进行缩放以适应图像视图的大小。其缩放比例一般为图像视图宽度(或高度)与二维码图像宽度(或高度)的比值。

CGFloat scaleX = imageView.bounds.size.width / outputImage.extent.size.width;

CGFloat scaleY = imageView.bounds.size.height / outputImage.extent.size.height;

CIImage *transformedImage = [outputImage imageByApplyingTransform:CGAffineTransformMakeScale(scaleX, scaleY)];

⑤、将二维码图像转换为UIImage对象。

imageView.image = [UIImage imageWithCIImage:transformedImage];


https://www.fengnayun.com/news/content/163803.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。