?二維碼的生成
生成一個(gè)二維碼也就是根據(jù)提供的數(shù)據(jù)內(nèi)容轉(zhuǎn)換成一張二維碼圖像稿黍。從iOS 7開始,我們只需要使用CIFilter中的CIQRCodeGenerator就可以輕易實(shí)現(xiàn)。只不過這樣生成的二維碼圖像是一個(gè)CIImage對象武福,如果要在圖像視圖中顯示淡诗,需要將其轉(zhuǎn)換為UIImage對象。具體步驟如下:
①蘸朋、使用名為?CIQRCodeGenerator?的過濾器創(chuàng)建一個(gè)CIFilter對象核无。
CIFilter?*filter?=?[CIFilter?filterWithName:@"CIQRCodeGenerator"]
②、為CIFilter對象設(shè)置?inputMessage?和?inputCorrectionLevel?參數(shù)藕坯。
inputMessage?:是一個(gè)NSData對象团南,用于表示被編碼的數(shù)據(jù)。對于字符串或者URL炼彪,需要使用NSISOLatin1StringEncoding字符串編碼將其轉(zhuǎn)換為NSData對象已慢。要注意的是,NSISOLatin1StringEncoding編碼對于中文或表情無法生成霹购,需要的話可以使用NSUTF8StringEncoding 替換佑惠。
inputCorrectionLevel?:是一個(gè)NSString對象,通常使用單個(gè)字母來指定糾錯(cuò)率齐疙,默認(rèn)值是?M?膜楷。該參數(shù)控制輸出圖像中編碼的附加數(shù)據(jù)量以提供糾錯(cuò)。其糾錯(cuò)率越高贞奋,輸出的圖像越大赌厅,同時(shí)也允許代碼的更大區(qū)域被破壞或模糊。通常有?L?轿塔、?M?特愿、?Q?、?H?這四種可能的糾正模式勾缭,分別代表了7%揍障、15%、25%俩由、30%的錯(cuò)誤恢復(fù)能力毒嫡。
③、使用CIFilter對象的?outputImage?屬性獲取生成的二維碼圖像
CIImage?*outputImage?=?filter.outputImage;
④幻梯、對生成的二維碼圖像進(jìn)行縮放兜畸。
由于生成的二維碼圖像尺寸一般都比較小,為了避免模糊碘梢,通常需要對它進(jìn)行縮放以適應(yīng)圖像視圖的大小咬摇。其縮放比例一般為圖像視圖寬度(或高度)與二維碼圖像寬度(或高度)的比值。
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)];
⑤煞躬、將二維碼圖像轉(zhuǎn)換為UIImage對象肛鹏。
imageView.image?=?[UIImage?imageWithCIImage:transformedImage];
https://www.fengnayun.com/news/content/163803.html