How to merge two UIImages?

后端 未结 7 1627
野趣味
野趣味 2020-12-07 16:57

I am trying to merge two different images and create a new one. This is the way I would like to do: I have this image (A):

It\'s a PNG image and I would like to mer

7条回答
  •  醉话见心
    2020-12-07 17:12

    Slightly modified version of answer by budidino. This implementation also handles negative posX and posY correctly.

    extension UIImage {
        func overlayWith(image: UIImage, posX: CGFloat, posY: CGFloat) -> UIImage {
            let newWidth = posX < 0 ? abs(posX) + max(self.size.width, image.size.width) :
                size.width < posX + image.size.width ? posX + image.size.width : size.width
            let newHeight = posY < 0 ? abs(posY) + max(size.height, image.size.height) :
                size.height < posY + image.size.height ? posY + image.size.height : size.height
            let newSize = CGSize(width: newWidth, height: newHeight)
    
            UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
            let originalPoint = CGPoint(x: posX < 0 ? abs(posX) : 0, y: posY < 0 ? abs(posY) : 0)
            self.draw(in: CGRect(origin: originalPoint, size: self.size))
            let overLayPoint = CGPoint(x: posX < 0 ? 0 : posX, y: posY < 0 ? 0 : posY)
            image.draw(in: CGRect(origin: overLayPoint, size: image.size))
            let newImage = UIGraphicsGetImageFromCurrentImageContext()!
            UIGraphicsEndImageContext()
    
            return newImage
        }
    }
    

提交回复
热议问题