This commit is contained in:
xsl
2026-03-11 09:44:18 +08:00
commit eeebb2070e
69 changed files with 2191 additions and 0 deletions
@@ -0,0 +1,92 @@
import CoreImage
import UIKit
import Foundation
import SwiftUICore
public class QR{
static func imageToBase64(_ image: UIImage) -> String {
if let imageData = image.jpegData(compressionQuality: 1.0) {
// 使imageData
let base64String = imageData.base64EncodedString(options: [])
return base64String
}
return "";
}
static func createQrCode(_ data:String,_ size:Int)->String{
// 使
var b:CGFloat=CGFloat(size);
guard let qrCodeImage = QR.generateQRCode(with:data, qrSize: b)
else{
return "";
}
let q = QR.imageToBase64(qrCodeImage)
return q
}
static func createQrCodeWithLogo(_ data:String,_ size:Int,_ logo: String,_ logoW:Int,_ logoH:Int)->String{
// 使
var b:CGFloat=CGFloat(size);
var w:CGFloat=CGFloat(logoW);
var h:CGFloat=CGFloat(logoH);
var logoSize:CGSize=CGSize(width: w, height: h)
guard let qrCodeImage = QR.generateQRCode(with:data,logoName:logo, logoSize:logoSize, qrSize: b)
else{
return "";
}
let q = QR.imageToBase64(qrCodeImage)
return q
}
// logo
static func generateQRCode(with content: String, logoName: String? = nil, logoSize: CGSize = CGSize(width: 50, height: 50), qrSize: CGFloat = 200) -> UIImage? {
// 1.
guard let qrFilter = CIFilter(name: "CIQRCodeGenerator") else { return nil }
let data = content.data(using: .utf8)
qrFilter.setValue(data, forKey: "inputMessage")
qrFilter.setValue("H", forKey: "inputCorrectionLevel") //
guard let qrImage = qrFilter.outputImage else { return nil }
// 2.
let scaleTransform = CGAffineTransform(scaleX: qrSize / qrImage.extent.size.width, y: qrSize / qrImage.extent.size.height)
let scaledQrImage = qrImage.transformed(by: scaleTransform)
// 3. UIImage
guard let qrUIImage:UIImage? = UIImage(ciImage: scaledQrImage) else { return nil }
// if let image: UIImage? = someFunctionThatReturnsUIImage() {
// // image
// } else {
// // imagenil
// }
// 4. logo
if let logoName = logoName, let logoImage = UIImage(named: logoName) {
let logoFrame = CGRect(x: (qrUIImage!.size.width - logoSize.width) / 2,
y: (qrUIImage!.size.height - logoSize.height) / 2,
width: logoSize.width,
height: logoSize.height)
UIGraphicsBeginImageContextWithOptions(qrUIImage!.size, false, 0.0)
qrUIImage?.draw(in: CGRect(origin: .zero, size: qrUIImage!.size))
logoImage.draw(in: logoFrame)
let finalImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return finalImage
}
// logo
return qrUIImage
}
}