如何根据顶部正面图像裁剪图像?

How to crop Image as per the top front image?

我的目的是从 UIView 导出 UIImage。所以我想在红色圆圈上添加清晰的边框,使输出图像看起来像第二张图像。

现在我想要这样的东西:我想在红色圆圈上添加清晰的背景,使输出图像看起来像下图。 (我知道如果我添加清晰的边框那么我无法实现这个所以请建议我实现这个)

这里我只添加了颜色,这2种颜色其实是图片

编辑

我可以使用下面的代码来做到这一点,但是切割区域不是四舍五入的。

func cut(hole: CGRect, inView v: UIView) {
    let p:CGMutablePath = CGMutablePath()
    p.addRect(CGRect.init(x: v.frame.origin.x, y: v.frame.origin.y, width: v.frame.width, height: v.frame.height))
    p.addRect(hole)

    let s = CAShapeLayer()
    s.path = p
    s.fillRule = CAShapeLayerFillRule.evenOdd

    v.layer.mask = s
}

这是我的演示Link:https://gofile.io/?c=jukO6B

当前输出

如有任何帮助,我们将不胜感激。

编辑 - 事实证明,OP 需要的效果与他最初向我们展示的效果完全不同。

这是我给他的建议 -

你必须做这样的事情,创建三个视图,一个是用户的图像,第二个是徽章的图像,第三个是透明边框,它将掩盖用户的图像。徽章的图像和边框必须共享相同的中心点。


您需要更改 layer 属性 UIView。您必须提供视图图层的用户定义属性 -

  • 关键路径:layer.cornerRadius,类型:数字,值:(任意半径)
  • 关键路径:layer.masksToBounds,类型:布尔值,值:选中

正如你所说,你想用故事板来做,所以这里有一个例子 -

设置两个视图的背景颜色'clear',一切顺利。

P.S. 在示例中,两个视图的大小都是固定的,如果您的视图具有动态大小(或自适应大小),您应该通过代码对视图进行四舍五入.

最后我根据要求对这个答案做了一些修改得到了解决方案:How can I 'cut' a transparent hole in a UIImage?

func cut(hole: CGRect, inView v: UIView) {
    let p:CGMutablePath = CGMutablePath()
    v.clipsToBounds = false
    p.addRect(CGRect.init(x: v.frame.origin.x, y: v.frame.origin.y, width: v.frame.width, height: v.frame.height))
    p.addRoundedRect(in: CGRect.init(x: self.vwCarContainer.frame.origin.x, y: self.vwCarContainer.frame.origin.y, width: self.vwCarContainer.frame.width, height: self.vwCarContainer.frame.height), cornerWidth: self.vwCarContainer.layer.cornerRadius, cornerHeight: self.vwCarContainer.layer.cornerRadius)

    let s = CAShapeLayer()
    s.path = p
    s.fillRule = CAShapeLayerFillRule.evenOdd

    v.layer.mask = s
}

感谢所有帮助我实现这一目标的人。