swift - 在 Swift 中从自定义相机拍摄后裁剪图像

标签 swift uiimageview uiimage crop avcaptureoutput

我有自定义相机 View ,最重要的是我有指南,我想将拍摄的照片裁剪到该指南,当我获得不同部分的裁剪图像时,我想获取指南内的区域。

enter image description here

enter image description here

func imageByCropToRect(rect:CGRect, scale:Bool) -> UIImage {

    var rect = rect
    var scaleFactor: CGFloat = 1.0
    if scale  {
        scaleFactor = self.scale
        rect.origin.x *= scaleFactor
        rect.origin.y *= scaleFactor
        rect.size.width *= scaleFactor
        rect.size.height *= scaleFactor
    }

    var image: UIImage? = nil;
    if rect.size.width > 0 && rect.size.height > 0 {
        let imageRef = self.cgImage!.cropping(to: rect)
        image = UIImage(cgImage: imageRef!, scale: scaleFactor, orientation: self.imageOrientation)
    }

    return image!
}


if let image = self.getImageFromSampleBuffer(buffer: sampleBuffer, orientation: orientation) {
let newImage = image.imageByCropToRect(rect: self.guideImageView.frame, scale: true)
selectedPropertyImage = newImage
stopCaptureSession()}

最佳答案

您必须使用 captureDevicePointConverted 将当前 View 层的坐标映射到相机预览层。例如:

    let previewImageLayerBounds = previewLayer.bounds
    let originalWidth = original.size.width
    let originalHeight = original.size.height

    let A = previewImageLayerBounds.origin
    let B = CGPoint(x: previewImageLayerBounds.size.width, y: previewImageLayerBounds.origin.y)
    let D = CGPoint(x: previewImageLayerBounds.size.width, y: previewImageLayerBounds.size.height)

    let a = previewLayer.captureDevicePointConverted(fromLayerPoint: A)
    let b = previewLayer.captureDevicePointConverted(fromLayerPoint: B)
    let d = previewLayer.captureDevicePointConverted(fromLayerPoint: D)

    let posX = floor(b.x * originalHeight)
    let posY = floor(b.y * originalWidth)

    let width: CGFloat = d.x * originalHeight - b.x * originalHeight
    let height: CGFloat = a.y * originalWidth - b.y * originalWidth

    let cropRect = CGRect(x: posX, y: posY, width: width, height: height)

关于swift - 在 Swift 中从自定义相机拍摄后裁剪图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47307430/

相关文章:

ios - 如何将 Facebook 闪烁添加到图像和 UIView 中?

ios - Swift 中的 UIImageView 动画有时间延迟

ios - UIImageView,更改 .image 导致重新布局 - 可以避免吗?

iOS:我从网络上得到很多 `UIImage` ,我怎么知道他们的 `aspect ratio` ?

swift - 设备 webKitView 未加载本地镜像,但模拟器加载图像

swift - 如何创建一个排除下限而不是上限的 HalfOpenInterval

ios - 无法在 Objective-C 单元测试中使用 Swift 类

ios - 增加 UIImageView 高度的最简单方法?

iphone - UIWebView 使用回调加载图像

ios - swift - 导航 Controller 删除后退按钮箭头