在UIImageView之上的Swift上将蒙版层作为UIImage获取

时间:2019-01-22 21:17:33

标签: swift image image-processing uiimageview uiimage

我正在尝试获取应用于UIImage的蒙版的UIImageView

我要使用UIBezierPath添加遮罩,并希望将实际的遮罩层设置为UIImage,而不是整个图像。可以将其视为作物功能。

我正在使用以下图像裁剪图像:

func cropImage() {
    shapeLayer.fillColor = UIColor.black.cgColor
    viewSource.imageView.layer.mask = shapeLayer
    viewSource.imageView.layer.masksToBounds = true

    UIGraphicsBeginImageContextWithOptions(viewSource.imageView.bounds.size, false, 1)
    viewSource.imageView.layer.render(in: UIGraphicsGetCurrentContext()!)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    self.completionObservable.onNext(newImage)
}

这最终使我在旧尺寸(初始imageView宽度和高度)之上获得了蒙版图像。但是我只希望遮罩的图像,不包括周围的白色背景。

屏幕如下所示:

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

我知道你现在的意思。这就是答案,只需更新imageContext的大小即可。

          UIGraphicsBeginImageContextWithOptions((shapeLayer.path?.boundingBoxOfPath)!.size, false, 1)

如果不是那么简单,可以尝试使用CIImage管道来实现。

    let context =  CIContext()
    let m1 = newImage?.cgImage
    let m = CIImage.init(cgImage: m1!)
    let bounds = imageView.layer.bounds
    let cgImage =   context.createCGImage(m, from: CGRect.init(x: 0, y: bounds.size.height, width: bounds.size.width, height: bounds.size.height))
    let newUIImage = UIImage.init(cgImage: cgImage!)

您可能需要调整变换。