将UIImage裁剪为自定义路径并保持正确的分辨率?

时间:2017-02-24 22:45:41

标签: ios swift core-graphics core-animation

enter image description here

我有一个观点(蓝色背景......),我打电话给#34;主要"在这里,在主要部分我添加了UIImageView然后我旋转,平移和缩放。在主要我有另一个子视图,显示裁剪区域。在黑暗区域之外的任何东西都需要裁剪。

我想弄清楚如何从这种状态正确创建裁剪图像。我希望生成的图像看起来像这样:

enter image description here

我想确保保持图像的分辨率。

有什么想法吗?

我试图弄清楚如何使用UIImageView的layer.mask属性。经过一些反馈,我想我可以在蓝色视图上有另一个视图(B),然后在BI上添加图像视图,这样我就可以确保B&#39的帧与裁剪蒙版叠加的矩形相匹配。我认为那可行吗?唯一的问题是我想确保我不会失去解决方案。

所以,早些时候我试过这个:

maskShape.frame = imageView.bounds
maskShape.path = UIBezierPath(rect: CGRect(x: 20, y: 20, width: 200, height: 200)).cgPath
imageView.layer.mask = maskShape

矩形只是一个测试矩形,图像将被裁剪到该路径,但是,我不确定如何从所有这些中获得可以保持原始图像的大分辨率的UIImage

所以,我已经实现了marco建议的方法,除了保持分辨率外,它都有效。

我使用此调用截取包含图像的视图的截图,并将其剪切到边界:

public func renderToImage(afterScreenUpdates: Bool = false) -> UIImage {
    let rendererFormat = UIGraphicsImageRendererFormat.default()
    rendererFormat.opaque = isOpaque
    let renderer = UIGraphicsImageRenderer(size: bounds.size, format: rendererFormat)

    let snapshotImage = renderer.image { _ in
        drawHierarchy(in: bounds, afterScreenUpdates: afterScreenUpdates)
    }
    return snapshotImage
}

我得到的图像是正确的,但不像我剪裁的那样清晰。

我可以保持高分辨率吗?

1 个答案:

答案 0 :(得分:0)

在保留图片的视图中,您必须将clipsToBounds设置为true。不确定我是否康复,但我认为这是你的"裁剪区"