init
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"deploymentTarget": "12"
|
||||
|
||||
// implementation 'com.google.zxing:core:3.4.1'
|
||||
// implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
export type QrOpt = {
|
||||
content:string,
|
||||
logo?:string,
|
||||
qrSize?:number,
|
||||
logoW?:number,
|
||||
logoH?:number,
|
||||
marign?:number,
|
||||
callback:(data:string)=>void
|
||||
|
||||
|
||||
}
|
||||
|
||||
export function getQrData (opt:QrOpt):void{
|
||||
console.log(opt.content)
|
||||
if(opt.qrSize==null){
|
||||
opt.qrSize=300;
|
||||
}
|
||||
|
||||
if(opt.logo==null){
|
||||
var b=QR.createQrCode(opt.content,opt.qrSize!.toInt());
|
||||
console.log(b);
|
||||
opt.callback("data:image/jpg;base64,"+b)
|
||||
//return "data:image/jpg;base64,"+b;
|
||||
}else{
|
||||
var l=UTSiOS.getResourcePath(opt.logo!)
|
||||
if(opt.logoW==null){
|
||||
opt.logoW=50;
|
||||
|
||||
}
|
||||
if(opt.logoH==null){
|
||||
opt.logoH=50;
|
||||
}
|
||||
var b=QR.createQrCodeWithLogo(opt.content,opt.qrSize!.toInt(),l,opt.logoW!.toInt(),opt.logoH!.toInt());
|
||||
console.log(b);
|
||||
opt.callback("data:image/jpg;base64,"+b)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
// // 处理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
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user