迅速合并两个不同的图像 [英] merge two different images swift
问题描述
我面临以下问题:由于合并,我必须合并两个图像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屋!