【问题标题】:overlay image in the middle of qr code ios在 qr 码 ios 中间叠加图像
【发布时间】:2018-06-28 19:02:46
【问题描述】:

我正在将图像叠加到生成的二维码上。 但是当我试图将位置图像更改为中心时,它不会移动到中心,而是移动到另一个地方。

这是我的二维码

 let overlayImage = UIImage(named: "asdasd")
    var overlayImageView = UIImageView(image: overlayImage)


    var QRCodeImage: CIImage!

    var barcodeImage: CIImage!

    func generateQRCode(from string:String) -> UIImage? {

        let data =  string.data(using: String.Encoding.isoLatin1)

        if let filter = CIFilter(name:"CIQRCodeGenerator") {
            filter.setValue(data, forKey: "inputMessage")
            let transform = CGAffineTransform(scaleX: 100, y: 100)

            if let output = filter.outputImage?.transformed(by: transform) {


                return UIImage(ciImage: output)
            }
        }
        return nil
    }

这是显示叠加图像和二维码的代码

     if (QRCodeImage == nil && barcodeImage == nil) {

            if let actualText = QRText.text {


                let imageQRCode = generateQRCode(from: actualText)
                let imageBarcode = generateBarcode(from: actualText)


                overlayImageView.frame = CGRect(x: 0, y: 0, width: 45, height: 45)
                overlayImageView.center = imgQRCode.center //////////
                overlayImageView.contentMode = .scaleAspectFill
                imgQRCode.addSubview(overlayImageView)




                var mainImageView = UIImageView(image:imageQRCode)
                mainImageView.addSubview(overlayImageView)


                imgQRCode.image = imageQRCode
                imgBarcode.image = imageBarcode


        }

我使用overlayImageView.center 得到的结果是

location of image in the bottom of the qr code

【问题讨论】:

    标签: ios uikit qr-code core-image


    【解决方案1】:

    试试这样的方法,它会在视图中居中。

    使UIImageView居中的重要代码行如下:

    overlayImageView.translatesAutoresizingMaskIntoConstraints = false
    overlayImageView.contentMode = .center
    
    qrCodeImageView.addSubview(overlayImageView)
    
    let centerXConst = NSLayoutConstraint(item: overlayImageView, attribute: .centerX, relatedBy: .equal, toItem: qrCodeImageView, attribute: .centerX, multiplier: 1, constant: 0)
    let centerYConst = NSLayoutConstraint(item: overlayImageView, attribute: .centerY, relatedBy: .equal, toItem: qrCodeImageView, attribute: .centerY, multiplier: 1, constant: 0)
    NSLayoutConstraint.activate([centerXConst, centerYConst])
    

    我使用这个确切的代码在 QR 码上居中放置一个图标:

    class ViewController: UIViewController {
    
        @IBOutlet weak var qrCodeImageView: UIImageView!
        var qrCodeImage: CIImage!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
    
            let textField = "fooqarcode"
            let data = textField.data(using: String.Encoding.isoLatin1, allowLossyConversion: false)
    
            let filter = CIFilter(name: "CIQRCodeGenerator")
    
            filter?.setValue(data, forKey: "inputMessage")
            filter?.setValue("Q", forKey: "inputCorrectionLevel")
    
            qrCodeImage = (filter?.outputImage)!
    
            let scaleX = qrCodeImageView.frame.size.width / qrCodeImage.extent.size.width
            let scaleY = qrCodeImageView.frame.size.height / qrCodeImage.extent.size.height
    
            let transformedImage = qrCodeImage.transformed(by: CGAffineTransform(scaleX: scaleX, y: scaleY))
            qrCodeImageView.image = UIImage(ciImage: transformedImage)
    
            let overlayImageView = UIImageView(image: UIImage(named: "block.png"))
            overlayImageView.translatesAutoresizingMaskIntoConstraints = false
            overlayImageView.contentMode = .center
    
            qrCodeImageView.addSubview(overlayImageView)
    
            let centerXConst = NSLayoutConstraint(item: overlayImageView, attribute: .centerX, relatedBy: .equal, toItem: qrCodeImageView, attribute: .centerX, multiplier: 1, constant: 0)
            let centerYConst = NSLayoutConstraint(item: overlayImageView, attribute: .centerY, relatedBy: .equal, toItem: qrCodeImageView, attribute: .centerY, multiplier: 1, constant: 0)
            NSLayoutConstraint.activate([centerXConst, centerYConst])
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多