| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- //
- // QRCodeViewModel.swift
- // TUIRoomKit
- //
- // Created by janejntang on 2023/1/11.
- // Copyright © 2023 Tencent. All rights reserved.
- //
- import Foundation
- import PhotosUI
- class QRCodeViewModel {
- let urlString: String
- var store: RoomStore {
- EngineManager.shared.store
- }
-
- init(urlString: String) {
- self.urlString = urlString
- }
-
- func copyAction(sender: UIButton, text: String) {
- UIPasteboard.general.string = text
- }
-
- func saveIntoAlbumAction(sender: UIButton, image: UIImage) {
- UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
- }
-
- func backAction() {
- RoomRouter.shared.dismissPopupViewController()
- }
-
- func createQRCodeImageView(url: String, imageView: UIImageView) {
- if url.count == 0 { return }
- guard let filter = CIFilter(name: "CIQRCodeGenerator") else {return}
- filter.setDefaults()
- // Set filter input data
- let data = url.data(using: String.Encoding.utf8)
- filter.setValue(data, forKey: "inputMessage")
- // Set the error correction rate of QR code
- filter.setValue("M", forKey: "inputCorrectionLevel")
- guard var image = filter.outputImage else { return }
- let transform = CGAffineTransform(scaleX: 20, y: 20)
- image = image.transformed(by: transform)
- let resultImage = UIImage(ciImage: image)
- guard let center = UIImage(named: "AppIcon.png") else { return }
- guard let resultImage = getClearImage(sourceImage: resultImage, center: center) else { return }
- imageView.image = resultImage
- }
-
- private func getClearImage(sourceImage: UIImage, center: UIImage) -> UIImage? {
- let size = sourceImage.size
- UIGraphicsBeginImageContext(size)
- sourceImage.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
- let width: CGFloat = 80
- let height: CGFloat = 80
- let x: CGFloat = (size.width - width) * 0.5
- let y: CGFloat = (size.height - height) * 0.5
- center.draw(in: CGRect(x: x, y: y, width: width, height: height))
- guard let resultImage = UIGraphicsGetImageFromCurrentImageContext() else { return nil }
- UIGraphicsEndImageContext()
- return resultImage
- }
-
- deinit {
- debugPrint("deinit \(self)")
- }
- }
|