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

时间:2016-01-20 07:28:04

标签: ios swift image merge uiimage

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

下图中的层次结构

UIView:检查剪辑子视图

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

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

Before pressing the button

我发现这篇文章merge two different images swift并试图掩盖图片

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

newImageView.image = maskedImage

但这并未考虑图像视图中的图像当前位置。它只返回原始图像(然后调整大小以适应UIIMageView,这就是为什么它比以前稍大一些)

After pressing the button

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

2 个答案:

答案 0 :(得分:6)

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

  1. 安排您想要的图像并合并'进入UIView。
  2. 拍摄UIView的图像快照。
  3. 我喜欢在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
      }
    
    }
    

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

    let mergedImage = containerUIView.capture()
    

答案 1 :(得分:0)

更新Damo对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!
    }
}