如何从UIImageView中删除边框/阴影?

我一直使用CIQRCodeGenerator CIFilter生成QR码,效果非常好:

在此处输入图像描述

但是当我调整UIImageView并重新生成时

@IBAction func sizeSliderValueChanged(_ sender: UISlider) { qrImageView.transform = CGAffineTransform(scaleX: CGFloat(sender.value), y: CGFloat(sender.value)) } 

我有时在图像周围得到一个奇怪的Border / DropShadow

在此处输入图像描述

如何防止它一直出现或完全删除?

我不知道它是什么,一个边框,一个dropShadow或一个Mask,因为我是Swift / iOS的新手。

提前致谢!

PS。 我没有发布任何QR码生成代码,因为它是漂亮的样板,并且可以在许多教程中找到,但如果你需要它,请告诉我

编辑: code to generate the QR Code Image

 private func generateQRCode(from string: String) -> UIImage? { let data = string.data(using: String.Encoding.ascii) guard let filter = CIFilter(name: "CIQRCodeGenerator") else { return nil } filter.setValue(data, forKey: "inputMessage") guard let qrEncodedImage = filter.outputImage else { return nil } let scaleX = qrImageView.frame.size.width / qrEncodedImage.extent.size.width let scaleY = qrImageView.frame.size.height / qrEncodedImage.extent.size.height let transform = CGAffineTransform(scaleX: scaleX, y: scaleY ) if let outputImage = filter.outputImage?.applying(transform) { return UIImage(ciImage: outputImage) } return nil } 

Code for button pressed

  @IBAction func generateCodeButtonPressed(_ sender: CustomButton) { if codeTextField.text == "" { return } let newEncodedMessage = codeTextField.text! let encodedImage: UIImage = generateQRCode(from: newEncodedMessage)! qrImageView.image = encodedImage qrImageView.transform = CGAffineTransform(scaleX: CGFloat(sizeSlider.value), y: CGFloat(sizeSlider.value)) qrImageView.layer.minificationFilter = kCAFilterNearest qrImageView.layer.magnificationFilter = kCAFilterNearest } 

没有你用来为图像视图生成图像的代码有点难以确定,但这看起来像一个resize的神器 – 在QR码的边缘外面CIImage可能是黑色或透明的,当图像时视图大小与图像的预期大小不匹配,边缘变得模糊,图像在其边界外或图像视图的背景颜色开始流血。可以通过设置图像视图层的缩小/放大来修复它过滤到“最近邻居”,如下所示:

 imageView.layer.minificationFilter = kCAFilterNearest imageView.layer.magnificationFilter = kCAFilterNearest 

从查看您添加的代码更新 – 您当前正在调整图像大小两次,首先调用applying(transform) ,然后在图像视图本身上设置变换。 我怀疑第一次resize是添加模糊度,我之前建议的缩小/放大滤镜无法修复。 尝试将generateQRCode缩短为:

 private func generateQRCode(from string: String) -> UIImage? { let data = string.data(using: String.Encoding.ascii) guard let filter = CIFilter(name: "CIQRCodeGenerator") else { return nil } filter.setValue(data, forKey: "inputMessage") if let qrEncodedImage = filter.outputImage { return UIImage(cgImage: qrEncodedImage) } return nil } 

我认为这里的问题是你尝试将其调整为“非正方形”(因为你的scaleX并不总是与scaleY相同),而QR码总是方形的,所以双方都应该有相同的比例因子来得到非模糊图像。

就像是:

 let scaleX = qrImageView.frame.size.width / qrEncodedImage.extent.size.width let scaleY = qrImageView.frame.size.height / qrEncodedImage.extent.size.height let scale = max(scaleX, scaleY) let transform = CGAffineTransform(scaleX: scale, y: scale) 

将确保你有“无边界/非模糊/平方”的UIImage

我想问题是图像(png)文件不是你的UIImageView。 尝试使用另一个图像,我希望它会工作!