2015-08-13 2 views
0

У меня возникает следующая проблема: мне нужно объединить два изображения A и B, чтобы создать новое изображение C в результате слияния. Первое изображение (A) является .png и его рамкой для второго (B), которое я взял. Как я могу объединить эти два изображения в новом (C), которые имеют одинаковый размер первого (A)?слияние двух разных изображений swift

Я попробовать этот код:

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), но с альфа воздействием на него, я хочу, чтобы образ (А) остаться на изображение (B) и объединить эти два в новый (C)! Спасибо!

UPDATE Может кто-то попытается исправить этот код:

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 } 

Это один может быть полезным, но синтаксис полна ошибок! Спасибо!

ответ

2

Попробуйте ввести код, который может вам помочь.

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 

} 

А потом называют это место, куда вы хотите, следующим образом:

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

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

код полна ошибок! Можете ли вы настроить синтаксис и адаптировать его для быстрого? –

+0

, пожалуйста, проверьте обновленный ответ –

+0

спасибо, он работает !! Как изменить размер maskedImage до 400x400? –

Смежные вопросы