我把两个图像合并为一个。我已经在互联网上提供了一些帮助,但它需要大约2,5秒。我正在模拟器上测试,所以让我们把它当作参考。
我目前使用UIGraphicsBeingImageContext。是否有更快的方法来实现这一目标?
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)
}
}
}
}发布于 2018-12-21 09:12:05
在带有原始代码的模拟器上,它需要在我的机器上使用1.52s。
由于基本映像不会被调整大小(self.size是在self.draw(in:)中传递的),而且它的alpha通道总是1,所以我可以使用以下方法至少获得200ms:
self.draw(at: CGPoint.zero, blendMode: .copy, alpha: 1)https://codereview.stackexchange.com/questions/209267
复制相似问题