【问题标题】:Cropping UIImage to custom path and keeping correct resolution?将 UIImage 裁剪为自定义路径并保持正确的分辨率?
【发布时间】:2017-02-24 22:45:41
【问题描述】:

我有一个视图(蓝色背景...),在这里我将其称为“主”,在主上我添加了一个UIImageView,然后我可以旋转、平移和缩放。在主视图上,我有一个显示裁剪区域的子视图。较暗区域下的任何内容都需要裁剪。

我试图弄清楚如何从这种状态正确地创建裁剪图像。我希望生成的图像如下所示:

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

有什么想法吗?

我试图弄清楚如何使用 UIImageView 的 layer.mask 属性。经过一些反馈后,我想我可以在蓝色视图上有另一个视图 (B),然后在 B 上添加图像视图,然后我会确保 B 的框架与裁剪蒙版覆盖的矩形相匹配。我认为这可行吗?唯一的事情是我想确保我不会失去分辨率。

所以,之前我试过这个:

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:您尝试了什么 2:您的结果是什么 3:您得到的结果有什么问题。也许是一张截图。

标签: ios swift core-graphics core-animation


【解决方案1】:

在您保留图像的视图中,您必须将clipsToBounds 设置为true。不确定我是否康复,但我想这是你的“种植区”

【讨论】:

  • 保留图像的视图是蓝色视图,即全屏。然后它是具有图像的 UIImageView ......所以,我不确定你的意思。我需要能够让裁剪器 UIImageView 保持分辨率,这看起来就像我发布的那样......
  • @zumzum 如果我理解得很好,你有一个裁剪区域,它是一个视图,不是吗?所以我认为您在该裁剪区域内有图像视图。这样对吗?然后您可以将剪辑应用到该裁剪区域。如果这不是您的视图层次结构,您应该将您的图像视图移动到一个视图内,该视图是您的裁剪区域(因此在两个黑色视图之间),并在该视图中应用剪辑
  • 好的,所以,我明白你的意思,我认为这是有道理的。然后我可以只要求包含图像视图的视图在上下文中呈现。那会保持图像的分辨率吗?换句话说,我不想失去分辨率......
  • 使用clipsToBounds 系统会裁剪所有超出视图边界的内容,这样您就不会失去分辨率,只是裁剪了视图边界之外的内容
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 2017-06-13
  • 2018-07-17
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
相关资源
最近更新 更多