在Swift中合并两个不同的图像

时间:2016-06-03 16:18:20

标签: ios swift merge uiimage

我想在Swift中合并两个UIImage

enter image description here

enter image description here

我用

尝试了
func maskImage(image: UIImage, withMask maskImage: UIImage) -> UIImage {

    let maskRef = maskImage.CGImage

    let mask = CGImageMaskCreate(
        CGImageGetWidth(maskRef),
        CGImageGetHeight(maskRef),
        CGImageGetBitsPerComponent(maskRef),
        CGImageGetBitsPerPixel(maskRef),
        CGImageGetBytesPerRow(maskRef),
        CGImageGetDataProvider(maskRef),
        nil,
        false)

    let masked = CGImageCreateWithMask(image.CGImage, mask)
    let maskedImage = UIImage(CGImage: masked!)

    // No need to release. Core Foundation objects are automatically memory managed.

    return maskedImage

}

和电话

    let imageName = data.valueForKey("imagename")!.description
    let image = UIImage(named: imageName)
    let imageBackground : UIImage = UIImage(named:"background")!    
    let maskedImage: UIImage = self.maskImage(image!, withMask: imageBackground)

    cell.imageButton.setImage(maskedImage, forState: .Normal)

结果只是我用 let image = UIImage(named: imageName) 获得的图像,第二张图像(排球)

我的错误是什么?

3 个答案:

答案 0 :(得分:4)

你可以用几行来完成:

var bottomImage:UIImage = UIImage(named: "imageName")!
var topImage:UIImage = UIImage(named:"background")!
// Change here the new image size if you want
var newSize = CGSizeMake(bottomImage.size.width, bottomImage.size.height)
UIGraphicsBeginImageContextWithOptions(newSize, false, bottomImage.scale)
bottomImage.drawInRect(CGRectMake(0,0,newSize.width,newSize.height))
topImage.drawInRect(CGRectMake(0,0,newSize.width,newSize.height), blendMode:CGBlendMode.Normal, alpha:1.0)
var newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

答案 1 :(得分:2)

如果您不关心效果,可以使用Core Image

let volleyballImage = CIImage(image: UIImage(named:"volleyball.png")!)
let otherImage = CIImage(image: UIImage(named:"other.png")!)
let compositeFilter = CIFilter(name: "CIAdditionCompositing")!

compositeFilter.setValue(volleyballImage,
                         forKey: kCIInputImageKey)
compositeFilter.setValue(otherImage,
                         forKey: kCIInputBackgroundImageKey)

if let compositeImage = compositeFilter.outputImage{
    let image = UIImage(CIImage: compositeImage)
    // do something with the "merged" image
}

答案 2 :(得分:0)

您可以使用我的简单方法将两个图像合并成两半。 像这样: enter image description here


  func mergeTwoImage(leftImg:UIImage,rightImg:UIImage) -> UIImage?{
        
        let size = CGSize(width: leftImg.size.width, height: leftImg.size.height)
        UIGraphicsBeginImageContext(size)
        
        let area1 = CGRect(x: 0, y: 0, width: size.width, height: size.height)
        let area2 = CGRect(x: size.width/2, y: 0, width: size.width, height: size.height)
        
        
        leftImg.draw(in: area1)
        rightImg.draw(in: area2, blendMode: .normal, alpha: 1)
        
        let finalImage = UIGraphicsGetImageFromCurrentImageContext()
        
        UIGraphicsEndImageContext()
        return finalImage
    }