如何将一个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
相关产品推荐
相关产品推荐

