iOS 二維碼生成以及識別
PS: 一直忙著解決提審上線問題,終於下下來精心整理下以前寫的東西了,最近蘋果稽核槽點太多. 感覺不愛了.
import AVFoundation
//MARK: -二維碼圖片生成以及識別
extension QRCodeTool{
//MARK: -生成二維碼圖片
@objc class func encodeQrString(_ infoDic:[String:Any])->CIImage{
//infoDicNew 為二維碼內需要包含的資訊
// 1.建立過濾器,這裡的@"CIQRCodeGenerator"是固定的
let filter = CIFilter.init(name: "CIQRCodeGenerator")
// 2.恢復預設設定
filter?.setDefaults()
// 3. 給過濾器新增資料
var infoJsonStr = infoDic轉成的jsonstring
var charset = CharacterSet.urlHostAllowed
charset.remove(charactersIn: "+")
charset.remove(charactersIn: "=")
let urlPrefix = "Associated Domains" 或者 app 的 scheme://
//按需要拼接,如果專案配置了通用連結(Universal
Links)的話,可以讓server配置個預設落地頁,直接二維碼識別出url可以跳轉到落地頁展示app或者直接跳轉到你的app,關於通用連結的說明我就不寫了,別人寫的挺好的.可參照http://www.cocoachina.com/ios/20150902/13321.html
let urlSuffix = infoJsonStr(infoJsonStr 可做加密)
let urlStr = urlPrefix + urlSuffix
let qrcodeData = urlStr.data(using: String.Encoding.utf8)
filter?.setValue(qrcodeData, forKey: "inputMessage")
// 4. 生成二維碼圖片
return filter!.outputImage!
}
//MARK: -識別圖片 成功結果為空時表明識別失敗
class func scan(img:UIImage?)->String?{
if img == nil{
//二維碼圖片為空
return nil;
}
let detector = CIDetector.init(ofType: CIDetectorTypeQRCode,
context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh])
// 識別二維碼取得識別結果
//先識別原圖片
var features = detector?.features(in: CIImage.init(cgImage: img!.cgImage!))
//messageString
var resultStr:String?
if (features?.count ?? 0) == 0{
//識別失敗,放大的二維碼圖片並識別
let image = screenSizeImage(with: img!)
features = detector?.features(in: CIImage.init(cgImage:image!.cgImage!))
if (features?.count ?? 0) > 0{
if let feature = features![0] as? CIQRCodeFeature{
resultStr = feature.messageString
}
}
} else {
for feature in features!{
if feature.type == CIFeatureTypeQRCode {
resultStr = (feature as? CIQRCodeFeature)?.messageString
break;
}
}
}
return resultStr
}
// 放大二維碼圖片
class func screenSizeImage(with image:UIImage)->UIImage{
let imageWidth = image.size.width
let imageHeight = image.size.height
if (imageWidth <= kScreenWidth && imageHeight <= kScreenHeight) {
return image;
}
let maxWH = max(imageWidth, imageHeight)
let scale = maxWH / (kScreenHeight * 2.0)
let size = CGSize(width:imageWidth / scale, height: imageHeight / scale)
UIGraphicsBeginImageContext(size);
image.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
let newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage ?? UIImage()
}
相關文章
- Flutter - 生成二維碼與識別二維碼Flutter
- ios--二維碼生成iOS
- PHP、Python、JavaScript 識別二維碼和生成二維碼解決方案PHPPythonJavaScript
- iOS 生成二維碼/條形碼iOS
- halcon識別二維碼
- Android----二維碼掃描、生成、相簿識別(16號)Android
- 鴻蒙NEXT開發案例:二維碼的生成與識別鴻蒙
- 二維碼生成
- 二維碼管理平臺 生成二維碼
- 二維碼生成-PythonPython
- 趣味二維碼生成
- 前端頁面中iOS版微信長按識別二維碼的bug前端iOS
- 純web端實現二維碼識別Web
- 直播系統搭建,java二維碼 生成二維碼Java
- qrcodejs js生成二維碼JS
- 使用 Python 生成二維碼Python
- Tp框架 生成二維碼框架
- 二維碼線上生成
- 二維碼生成工具類
- 二維碼知識
- 用OpenCV和Python識別二維碼和條形碼OpenCVPython
- 支付寶 二維碼/轉賬碼/生成方式,突破二維碼生成數量的限制
- php生成二維碼圖片PHP
- PHP生成簡單二維碼PHP
- url 生成二維碼圖片
- 如何使用 Python 生成二維碼?Python
- java實現二維碼生成Java
- Tp生成小程式二維碼
- 二維碼生成工具 Simple QrCode
- APP下載頁二維碼支援識別微信APP
- 網頁長按儲存及識別二維碼網頁
- iOS 掃描二維碼/條形碼iOS
- 從普通二維碼到檔案生成二維碼的轉變
- 揭開二維碼背後的神秘面紗用二維碼識別 API 就夠了API
- excel中加水印以及二維碼Excel
- Vue專案中生成二維碼Vue
- 根據URL地址生成二維碼
- YII2.0框架生成二維碼框架