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 { // // 处理image为nil的情况 // } // 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 } }