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

jos*_*111 1 merge image uiimage ios swift

我正在尝试合并2张图像而不会丢失原始图像的大小.我有一个大的白色图像,我想将一个较小的图像合并到它上面.如果我移动较小的图像以便只有较大的图像显示在较大的图像上,那么当我合并2个图像时,只显示正在显示的图像的一半,并且应该裁剪另一边.

下图的层次结构

UIView:检查剪辑子视图

---->带有白色图像的UIImageView

----> UIImageView:此图像有一个平移手势,允许它在视图中移动.

在按下按钮之前

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

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

newImageView.image = maskedImage
Run Code Online (Sandbox Code Playgroud)

但这并未考虑图像视图中的图像当前位置.它只返回原始图像(然后调整大小以适应UIIMageView,这就是它比以前更大的原因)

按下按钮后

有谁知道如何合并2张图片并考虑他们在合并时的位置?理想情况下,第二个图像看起来与第一个图像完全相同,只不过它是单个图像而不是两个图像.

Dam*_*amo 6

一种合理的技术可以给你一个理想的结果

  1. 将您想要"合并"的图像排列到UIView中.
  2. 拍摄UIView的图像快照.

我喜欢在UIView上创建扩展,它会对图像进行快照(如果你愿意,可以拍摄一个屏幕截图).从而:-

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
  }

}
Run Code Online (Sandbox Code Playgroud)

一旦您的图像(作为子视图)包含在单个视图中,您就可以.

let mergedImage = containerUIView.capture()
Run Code Online (Sandbox Code Playgroud)