voltea - iPhone, ¿cómo se superpone una imagen a otra para crear una nueva imagen para guardar?(filigrana)
porque las selfies salen al reves iphone (3)
Es bastante fácil:
UIImage *backgroundImage = [UIImage imageNamed:@"image.png"];
UIImage *watermarkImage = [UIImage imageNamed:@"watermark.png"];
UIGraphicsBeginImageContext(backgroundImage.size);
[backgroundImage drawInRect:CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height)];
[watermarkImage drawInRect:CGRectMake(backgroundImage.size.width - watermarkImage.size.width, backgroundImage.size.height - watermarkImage.size.height, watermarkImage.size.width, watermarkImage.size.height)];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Si desea que el fondo y la marca de agua sean del mismo tamaño, utilice este código
...
[backgroundImage drawInRect:CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height)];
[watermarkImage drawInRect:CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height)];
...
Básicamente, quiero tomar una imagen que el usuario elija de su biblioteca de fotos y luego aplicar una marca de agua, un triángulo en la parte inferior derecha que tiene el nombre de la aplicación en él. Tengo la segunda imagen ya hecha con una capa transparente en photoshop.
Probé una función, que no puedo recordar el nombre exacto, pero involucró CGIImages y máscaras. Esto combina las dos imágenes, pero como máscara, lo que hacía que la imagen fuera más oscura donde estaba la capa transparente y las imágenes no se fusionaron per se, simplemente se enmascaró.
¿Cómo conseguiría que la imagen de marca de agua se fusione con otra imagen para hacer un UIImage, sin mostrar las imágenes en la pantalla?
Gracias.
Puede utilizar este método, que es muy dinámico y puede especificar la posición de inicio de la segunda imagen y el tamaño total de la imagen.
-(UIImage *) addImageToImage:(UIImage *)img withImage2:(UIImage *)img2 andRect:(CGRect)cropRect withImageWidth:(int) width{
CGSize size = CGSizeMake(width,40);
UIGraphicsBeginImageContext(size);
CGPoint pointImg1 = CGPointMake(0,0);
[img drawAtPoint:pointImg1];
CGPoint pointImg2 = cropRect.origin;
[img2 drawAtPoint: pointImg2];
UIImage* result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}
La solución proporcionada por omz también funciona en Swift , así:
let backgroundImage = UIImage(named: "image.png")
let watermarkImage = UIImage(named: "watermark.png")
UIGraphicsBeginImageContextWithOptions(backgroundImage.size, false, 0.0)
backgroundImage.drawInRect(CGRect(0.0, 0.0, backgroundImage.size.width, backgroundImage.size.height))
watermarkImage.drawInRect(CGRect(backgroundImage.size.width - watermarkImage.size.width, backgroundImage.size.height - watermarkImage.size.height, watermarkImage.size.width, watermarkImage.size.height))
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()