在Swift中合并2个图像,而不会丢失原始图像的大小

我试图合并2个图像,而不会丢失原始图像的大小。 我有一个大的白色图像,我想合并一个较小的图像。 如果我移动较小的图像,使其只显示在较大图像的顶部,那么当我合并这两个图像时,只有所显示图像的一半应该合并,而另一面应该被裁剪掉。

下面的图像的层次结构

UIView:剪辑子视图被选中

—->用白色图像的UIImageView

—-> UIImageView:这个图像有一个平移手势,允许它在视图内移动。

按下按钮之前

我发现这篇文章迅速合并了两个不同的图像,并试图掩盖图像

let maskedImage: UIImage = self.maskImage(imageView.image!, withMask: whiteImage.image!) newImageView.image = maskedImage 

但是这并不考虑图像视图中图像当前位置。 它只是返回原始图像(然后resize以适应UIIMageView,这就是为什么它比以前大一点)

按下按钮后

有谁知道我怎么能合并这两个图像,并考虑到合并时的位置? 理想情况下,第二个图像看起来像第一个图像,除了这是一个单一的图像,而不是两个。

一个合理的技术,会给你想要的结果将是

  1. 排列你想“合并”到UIView的图像。
  2. 拍摄该UIView的图像快照。

我喜欢在UIView上创build扩展,这将快照一个图像(如果你愿意的话,可以拍一个屏幕截图)。 从而:-

 import UIKit extension UIView { func capture() -> UIImage { UIGraphicsBeginImageContextWithOptions(self.frame.size, self.opaque, UIScreen.mainScreen().scale) self.layer.renderInContext(UIGraphicsGetCurrentContext()!) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } } 

一旦你的图像(作为子视图)包含在一个单一的视图,你可以。

 let mergedImage = containerUIView.capture() 

更新达摩的Swift 3.x的答案

 extension UIView { func capture() -> UIImage { UIGraphicsBeginImageContextWithOptions(self.frame.size, self.isOpaque, UIScreen.main.scale) self.layer.render(in: UIGraphicsGetCurrentContext()!) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image! } }