You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将一个UIImage居中叠加到另一个UIImage并返回UIImage?

问题:将UIImage居中叠加到另一UIImage并返回UIImage

我有两个UIImage对象:image1和image2,希望将image2居中叠加到image1之上,最终返回UIImage类型而非UIImageView。目前我的代码可实现方形图(image2)叠加到圆形图(image1)上,但image2显示在右下角,需调整使其位于image1中心。

注意事项

  • 我知晓在SwiftUI中叠加图片更简便,且用UIImageView居中更易实现,但应用需求必须通过UIImage完成居中叠加并返回UIImage;
  • image1始终为圆形图,image2可为任意图片,但尺寸小于image1,示例中使用方形图;
  • 当前测试用的圆形图为2000x2000像素,方形图为1200x1200像素。

当前代码

import SwiftUI

struct ContentViewA: View {
    @State private var displayImage: Image?
    
    var body: some View {
        VStack {
            if let displayImage = displayImage {
                displayImage
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(width: 80.0, height: 80.0)
                    .padding(.leading, 5.0)
                    .contentShape(Circle())
            } else {
                Text("There is no image to display.")
            }
        }
        .onAppear {
            displayImage = self.getImage()
        }
    }
    
    func getImage() -> Image {
        let baseCircleSymbol = UIImage.init(named: "circle")?.withTintColor(UIColor(Color.yellow), renderingMode: .alwaysTemplate) ?? UIImage()
        let squareIcon = UIImage.init(named: "square")?.withTintColor(UIColor(Color.blue), renderingMode: .alwaysTemplate) ?? UIImage()
        let displayImage = baseCircleSymbol.overlayImage(imageToOverlay: squareIcon)
        return Image(uiImage: displayImage)
    }
}

extension UIImage {
    func overlayImage(imageToOverlay: UIImage) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
        let actualArea = CGRect(x: 0, y: 0, width: size.width, height: size.height)

        let overlayImageArea = CGRect(x: size.width - imageToOverlay.size.width,
                                      y: size.height - imageToOverlay.size.height,
                                      width: 900, height: 900)
        
        self.draw(in: actualArea)
        imageToOverlay.draw(in: overlayImageArea)
        
        let overlayed = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return overlayed
    }
}

当前效果截图

叠加效果问题截图


内容的提问来源于stack exchange,提问作者tech_human

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:10:14