迅速合并两个不同的图像 [英] merge two different images swift

查看:67
本文介绍了迅速合并两个不同的图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我面临以下问题:由于合并,我必须合并两个图像A和B来创建新图像C.第一张图片(A)是.png,它是我拍摄的第二张图片(B)的图片框.如何将这两个图像合并为一个新的(C),其大小与第一个(A)相同?

I'm facing the following problem : I have to merge two images A and B to create a new image C as a result of the merging. The first image (A) is a .png and its a picture frame for the second one (B) which I took. How can I merge this two images in a new one (C) which have the same size of the first one (A)?

我已经尝试了以下代码:

I've try this code:

var bottomImage: UIImage = polaroidFoto.image!
var image: UIImage = immaginePropria.image!
var newSize: CGSize = CGSizeMake(300, 300)
UIGraphicsBeginImageContext(newSize)
bottomImage.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height))
image.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height), blendMode: kCGBlendModeNormal, alpha: 0.8) //0.8 default
var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

但是这个给我返回了一个新图像(C),但是上面有alpha效果,我希望图像(A)停留在图像(B)上方,并将这两个图像合并成一个新图像(C)!谢谢!

But this one return to me a new image (C) but with alpha effect on it, i want the image (A) stay over the image (B) and merge this two into a new one (C)! Thank you!

更新有人可以尝试更正此代码:

UPDATE Can someone try to correct this code:

func maskImage(image: UIImage, withMask maskImage: UIImage) -> UIImage {
var colorSpace: CGColorSpaceRef = CGColorSpaceCreateDeviceRGB()
var maskImageRef: CGImageRef = maskImage.CGImage()
var mainViewContentContext: CGContextRef = CGBitmapContextCreate(Nil, maskImage.size.width, maskImage.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedFirst)
CGColorSpaceRelease(colorSpace)
if mainViewContentContext == nil {
    return nil
}
var ratio: CGFloat = 0
ratio = maskImage.size.width / image.size.width
if ratio * image.size.height < maskImage.size.height {
    ratio = maskImage.size.height / image.size.height
}
var rect1: CGRect = 00maskImage.size.widthmaskImage.size.height
var rect2: CGRect = -((image.size.width * ratio) - maskImage.size.width) / 2-((image.size.height * ratio) - maskImage.size.height) / 2image.size.width * ratioimage.size.height * ratio
CGContextClipToMask(mainViewContentContext, rect1, maskImageRef)
CGContextDrawImage(mainViewContentContext, rect2, image.CGImage)
var newImage: CGImageRef = CGBitmapContextCreateImage(mainViewContentContext)
CGContextRelease(mainViewContentContext)
var theImage: UIImage = UIImage.imageWithCGImage(newImage)
CGImageRelease(newImage)
return theImage }

这可能有用,但是语法中充满错误!谢谢!

This one may be useful but the syntax is full of errors! Thank you!

推荐答案

尝试使用以下代码可能会对您有所帮助.

Try following code for that that may help you.

 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

}

然后按照需要在任何地方调用它:

And then call that wherever you want as follow:

var imageA : UIImage = UIImage(named:"YourImageName")!
var imageB : UIImage = UIImage(named:"YourImageName")!

var maskedImage: UIImage = self.maskImage(imageA, withMask: imageB)

这篇关于迅速合并两个不同的图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆