我尝试合并2张图片而不会丢失原始图片的大小。 我有一个大的白色图像,我想将一个较小的图像合并到它上面。如果我移动较小的图像以便只有较大的图像显示在较大的图像上,那么当我合并2个图像时,只显示正在显示的图像的一半,并且应该裁剪另一边。
下图中的层次结构
UIView:检查剪辑子视图
---->带有白色图像的UIImageView
----> UIImageView:此图像具有平移手势,允许它在视图中移动。
我发现这篇文章merge two different images swift并试图掩盖图片
let maskedImage: UIImage = self.maskImage(imageView.image!, withMask: whiteImage.image!)
newImageView.image = maskedImage
但这并未考虑图像视图中的图像当前位置。它只返回原始图像(然后调整大小以适应UIIMageView,这就是为什么它比以前稍大一些)
有谁知道如何合并2张图片并考虑合并时的位置?理想情况下,第二张图像看起来与第一张图像完全相同,只是它是单张图像而不是两张图像。
答案 0 :(得分:6)
一种合理的技术可以给你一个理想的结果
我喜欢在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!
}
}