【问题标题】:How to customize the camera view and capture the part in the overlay?如何自定义相机视图并捕获叠加层中的部分?
【发布时间】:2017-11-01 10:52:14
【问题描述】:

我需要构建一个类似这样的自定义相机视图:example image

我使用了 AVFoundation 并在 AVCaptureVideoPreviewLayer 上放置了一个 UIImageView,它看起来几乎相同(虽然我不确定这是否是正确的方法,我就是这样写标题的)。我正在捕获图像并将其保存到画廊,但我只需要中间矩形中的图像。

有什么建议吗?

提前致谢!

【问题讨论】:

    标签: ios swift camera uiimage avfoundation


    【解决方案1】:

    实际上,来自 Nishant Bhindi 的答案需要一些更正。下面的代码将完成这项工作:

    func cropToBounds(image: UIImage) -> UIImage
    {
        let contextImage: UIImage = UIImage(cgImage: image.cgImage!)
        let contextSize: CGSize = contextImage.size
        let widthRatio = contextSize.height/UIScreen.main.bounds.size.height
        let heightRatio = contextSize.width/UIScreen.main.bounds.size.width
    
        let width = (self.imgOverlay?.frame.size.width)!*widthRatio
        let height = (self.imgOverlay?.frame.size.height)!*heightRatio
        let x = (contextSize.width/2) - width/2
        let y = (contextSize.height/2) - height/2
        let rect = CGRect(x: x, y: y, width: width, height: height)
    
        let imageRef: CGImage = contextImage.cgImage!.cropping(to: rect)!
        let image: UIImage = UIImage(cgImage: imageRef, scale: 0, orientation: image.imageOrientation)
        return image
    }
    

    【讨论】:

      【解决方案2】:

      您需要在覆盖 imageView 的上下文中裁剪图像。将捕获的图像传递到下面的函数中,这可能会对您有所帮助。

      func cropToBounds(image: UIImage) -> UIImage
      {
              let contextImage: UIImage = UIImage(cgImage: image.cgImage!)
              let contextSize: CGSize = contextImage.size
              let widthRatio = contextSize.height/UIScreen.main.bounds.size.width
              let heightRatio = contextSize.width/UIScreen.main.bounds.size.height
      
              let width = (self.imgOverlay?.frame.size.width)!*widthRatio
              let height = (self.imgOverlay?.frame.size.height)!*heightRatio
              let x = ((self.imgOverlay?.frame.origin.x)!)*widthRatio
              let y = (self.imgOverlay?.frame.origin.y)!*heightRatio
              let rect = CGRect(x: x, y: y, width: height, height: width)
      
              let imageRef: CGImage = contextImage.cgImage!.cropping(to: rect)!
              let image: UIImage = UIImage(cgImage: imageRef, scale: image.scale, orientation: image.imageOrientation)
              return image
      }
      

      【讨论】:

      • 感谢您的回复!...问题是它返回图像的左上角...不是覆盖边框中的图像...质量很差:(
      • 在预览视图中添加叠加图像视图。
      猜你喜欢
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多