Как объединить два UIImages?
Я пытаюсь объединить два разных изображения и создать новый. Так я бы хотел:
У меня есть этот образ (A): ![polaroid]()
Это изображение PNG, и я хотел бы объединить его с другим изображением (B), которое я взял с телефона, чтобы создать что-то вроде этого:
![polaroid merged]()
Мне нужна функция, которая объединяет A с B, создавая C. Размер должен оставаться от изображения A, а изображение B должно автоматически адаптировать размер, чтобы вписаться в поляроид (A). Можно ли это сделать? Благодарим за помощь!
UPDATE
Только одно, изображение (A) - это квадрат, а изображение, которое я взял, - это 16: 9, как я могу это исправить? Если я использую вашу функцию, изображение (B), которое я взял, растягивается!
Ответы
Ответ 1
Надеюсь, это поможет вам,
var bottomImage = UIImage(named: "bottom.png")
var topImage = UIImage(named: "top.png")
var size = CGSize(width: 300, height: 300)
UIGraphicsBeginImageContext(size)
let areaSize = CGRect(x: 0, y: 0, width: size.width, height: size.height)
bottomImage!.drawInRect(areaSize)
topImage!.drawInRect(areaSize, blendMode: kCGBlendModeNormal, alpha: 0.8)
var newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
Все лучшее:)
Ответ 2
Таким образом, изображение наложения будет намного чище
class func mergeImages(imageView: UIImageView) -> UIImage {
UIGraphicsBeginImageContextWithOptions(imageView.frame.size, false, 0.0)
imageView.superview!.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
![введите описание изображения здесь]()
Ответ 3
Объективная версия C этого решения с пересмотренной логикой верхнего изображения:
-(UIImage *)getImageInclosedWithinAnotherImage
{
float innerImageSize = 20;
UIImage *finalImage;
UIImage *outerImage = [UIImage imageNamed:@"OuterImage.png"];
UIImage *innerImage = [UIImage imageNamed:@"InnerImage.png"];
CGSize outerImageSize = CGSizeMake(40, 40); // Provide custom size or size of your actual image
UIGraphicsBeginImageContext(outerImageSize);
//calculate areaSize for re-centered inner image
CGRect areSize = CGRectMake(((outerImageSize.width/2) - (innerImageSize/2)), ((outerImageSize.width/2) - (innerImageSize/2)), innerImageSize, innerImageSize);
[outerImage drawInRect:CGRectMake(0, 0, outerImageSize.width, outerImageSize.height)];
[innerImage drawInRect:areSize blendMode:kCGBlendModeNormal alpha:1.0];
finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return finalImage;
}