gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:19:12 24 4
gpt4 key购买 nike

我一直在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com