【问题标题】:Get visible part of UIImageView as UIImage in Swift在 Swift 中将 UIImageView 的可见部分作为 UIImage 获取
【发布时间】:2021-11-30 03:57:01
【问题描述】:

在我的应用中,我正在尝试实现裁剪功能。所以现在我需要将 UIImageView 的可见部分转换为 UIImage。 这是 UI 调试器的屏幕截图。

我试过用这个功能来实现,但是不行。

func imageFromImageView(imageView: UIImageView)  -> UIImage? {
   UIGraphicsBeginImageContext(imageView.frame.size)
    let context = UIGraphicsGetCurrentContext()!
    context.rotate(by: 2 * .pi)
    
    imageView.layer.render(in: context)
    
    let image = UIGraphicsGetImageFromCurrentImageContext()
    return image
}

【问题讨论】:

标签: ios swift uiimageview uiimage


【解决方案1】:

您可以使用以下扩展名:

private var rendererKey: UInt8 = 0
extension UIView {
    var renderer: UIGraphicsImageRenderer! {
         get {
             guard let rendererInstance = objc_getAssociatedObject(self, &rendererKey) as? UIGraphicsImageRenderer else {
                self.renderer = UIGraphicsImageRenderer(bounds: bounds)
                return self.renderer
             }
             return rendererInstance
        }
        set(newValue) {
            objc_setAssociatedObject(self, &rendererKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
        }
    }
    func snapImageView() -> UIImageView {
        let img:UIImage = renderer.image { ctx in
         DispatchQueue.main.async { 
              layer.render(in: ctx.cgContext)
          }
        }
        let imageView:UIImageView = UIImageView(image: img)
        imageView.frame = renderer.format.bounds
        imageView.clipsToBounds = true
        return imageView
    }
}
// Generate image and image view of any view instance
let anImageView = yourView.snapImageView()

【讨论】:

  • 不起作用。没有图片。
  • 你可以通过 yourImageView.snapImageView() 创建它
  • 是的。我已经完成了,但是当我尝试将该 imageView 的图像属性上传到我的后端时,它显示的是一张空照片。
  • 本地存储然后上传
猜你喜欢
  • 2014-05-08
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多