首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将两个UIImages合并为一个

将两个UIImages合并为一个
EN

Code Review用户
提问于 2018-12-08 12:22:26
回答 1查看 1.6K关注 0票数 3

我把两个图像合并为一个。我已经在互联网上提供了一些帮助,但它需要大约2,5秒。我正在模拟器上测试,所以让我们把它当作参考。

我目前使用UIGraphicsBeingImageContext。是否有更快的方法来实现这一目标?

代码语言:javascript
运行
复制
extension UIImage {
    func overlayWith(image: UIImage, posX: CGFloat, posY: CGFloat, topImageSize: CGSize,
                     combinedImage: @escaping (UIImage) -> Void) {
        DispatchQueue.global(qos: .userInteractive).async {
            let newWidth = self.size.width < posX + image.size.width ? posX + image.size.width : self.size.width
            let newHeight = self.size.height < posY + image.size.height ? posY + image.size.height : self.size.height
            let newSize = CGSize(width: newWidth, height: newHeight)

            UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
            self.draw(in: CGRect(origin: CGPoint.zero, size: self.size))
            image.draw(in: CGRect(origin: CGPoint(x: posX, y: posY), size: topImageSize))
            let newImage = UIGraphicsGetImageFromCurrentImageContext()!
            UIGraphicsEndImageContext()

            DispatchQueue.main.async {
                combinedImage(newImage)
            }
        }
    }
}
EN

回答 1

Code Review用户

发布于 2018-12-21 09:12:05

在带有原始代码的模拟器上,它需要在我的机器上使用1.52s

由于基本映像不会被调整大小(self.size是在self.draw(in:)中传递的),而且它的alpha通道总是1,所以我可以使用以下方法至少获得200ms

代码语言:javascript
运行
复制
self.draw(at: CGPoint.zero, blendMode: .copy, alpha: 1)
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/209267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档