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

Posted

技术标签:

【中文标题】如何根据顶部正面图像裁剪图像?【英文标题】:How to crop Image as per the top front image? 【发布时间】:2019-10-14 10:14:23 【问题描述】:

我的目的是从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

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

电流输出

我们将不胜感激。

【问题讨论】:

你想去除汽车图像的白色背景..?? 是的,但 Ethan Hunt 图像不会在汽车白色背景所在的同一帧处被剪切。请查看我更新的问题。 您是否使用任何代码来执行此操作?如果是,请告诉我们。 @HarvantS.Choudhary,不,我没有使用任何代码来执行此操作,我想通过 UIStoryBoard 中的 UIView 层次结构来执行此操作。 您使用了太多视图来执行此操作,您应该通过代码执行此操作,如果没有视图对象的 layer 属性,您将无法使图像变圆,这不是一个技巧,它直截了当圆形图像。 【参考方案1】:

最后我根据要求在这个答案中进行了一些修改,得到了解决方案: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

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

【讨论】:

【参考方案2】:

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

这是我给他的建议——

clip-masking uiview with CAShapeLayer and UIBezierPath

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


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

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

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

将两个视图的背景颜色设置为“清除”,一切顺利。

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

【讨论】:

我认为您没有正确理解我的问题,或者我无法表达。让我更新我的问题 请检查更新的答案。之前没有完成。 正如我在您附加的屏幕中看到的那样,我知道这样做但我不想这样做 好吧那我真的不明白你在问什么,解释一下。 查看我编辑的问题。我附上了输出图像。

以上是关于如何根据顶部正面图像裁剪图像?的主要内容,如果未能解决你的问题,请参考以下文章

根据android中的矩形坐标裁剪捕获的图像

如何从顶部和底部裁剪位图图像?

同时使用css显示图像裁剪图像的顶部和底部

裁剪和放置图像以实现电池电量效果

PHP图像从顶部,底部,左侧和右侧裁剪

Android图像视图顶部裁剪