Swift 从两个并排的 UIImage 中生成单个 UIImage

3 uikit uiimage ios swift

我找到了Objective-C同一问题的答案@ 将两个 UIImages 并排保存为一个组合图像?但不适合斯威夫特。

我想并排组合两个 UIImage 以创建一个 UIImage。两个图像将在边界处合并并保持原始分辨率(无屏幕截图)。

如何将两张图片另存为一张图片?

图像A + 图像B = 图像C

在此输入图像描述

Dáv*_*tor 5

您可以使用链接问题中的想法UIGraphicsContext并排UIImage.draw绘制 2 个图像,然后UIImage从上下文中创建一个新图像。

extension UIImage {
    func mergedSideBySide(with otherImage: UIImage) -> UIImage? {
        let mergedWidth = self.size.width + otherImage.size.width
        let mergedHeight = max(self.size.height, otherImage.size.height)
        let mergedSize = CGSize(width: mergedWidth, height: mergedHeight)
        UIGraphicsBeginImageContext(mergedSize)
        self.draw(in: CGRect(x: 0, y: 0, width: mergedWidth, height: mergedHeight))
        otherImage.draw(in: CGRect(x: self.size.width, y: 0, width: mergedWidth, height: mergedHeight))
        let mergedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return mergedImage
    }
}
Run Code Online (Sandbox Code Playgroud)

用法(假设leftImagerightImage都是UIImages):

let mergedImage = leftImage.mergedSideBySide(with: rightImage)
Run Code Online (Sandbox Code Playgroud)

功能演示(使用SwiftUI通过预览更快地显示):

struct Playground_Previews: PreviewProvider {
    static let leftImage = UIColor.blue.image(CGSize(width: 128, height: 128))
    static let rightImage = UIColor.red.image(CGSize(width: 128, height: 128))

    static let mergedImage = leftImage.mergedSideBySide(with: rightImage) ?? UIImage()

    static var previews: some View {
        VStack(spacing: 10) {
            Image(uiImage: leftImage)
            Image(uiImage: rightImage)
            Image(uiImage: mergedImage)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

合并结果

UIColor.image函数来自Swift 中的 Create UIImage with Solid Color