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

标签 ios swift uiimageview

我一直在使用 CIQRCodeGenerator 生成二维码 CIFilter而且效果很好:

enter image description here

但是当我调整 UIImageView 的大小时再次生成

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

我有时会在图像周围出现奇怪的边框/投影:

enter image description here

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

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

提前致谢!

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

编辑: 生成二维码图片的代码

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
  }

按下按钮的代码

  @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
  }

最佳答案

如果没有用于为 ImageView 生成图像的代码,很难确定,但这看起来像是一个调整大小的工件——CIImage 在二维码边缘之外可能是黑色或透明的,并且当 ImageView 尺寸与图像的预期尺寸不匹配时,边缘会变得模糊,并且图像边界外或 ImageView 的背景颜色开始渗入。可以通过设置 ImageView 层的缩小/放大过滤器到“最近的邻居”,像这样:

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

根据您添加的代码进行更新 — 您目前正在两次调整图像大小,首先是调用 applying(transform),然后是在 ImageView 本身上设置变换。我怀疑第一次调整大小会增加模糊度,我之前建议的缩小/放大过滤器无法修复。尝试将 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
}

关于ios - 如何从 UIImageView 中删除边框/阴影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44209633/

相关文章:

swift - 如何在按钮上显示图像名称?我们什么时候上传?

swift - 在 Series 5 Watch 和 Watch OS6 上使用 `HKAnchoredObjectQuery` 返回心率值时出现问题

ios - 如何将 ImageView 及其属性从一个 View Controller 传递到另一个 View Controller ?

iphone - 以下语法的含义是什么? (objective-c 风格的方法调用)

ios - 如何在一个 git repo 中拥有多个 pod

ios - 将 getDocument 与 Firestore 链接起来?

ios - swift 4 : Unable to get User Profile image from Facebook

ios - 从 UITapGestureRecognizer 中查找被点击的 UIImageview

ios - 如何使用 Swift 重新加载 UITableView header

ios - UISplitViewController - 在 vi​​ewDidLoad 上显示主视图的弹出窗口