iphone - una - juntar dos fotos android
Cómo combinar/fusionar 2 imágenes en 1 (7)
- crear una subvista para añadir imágenes.
- agregue todas sus imágenes en esa vista en lugar de la vista principal.
- Deja que los botones y otras cosas permanezcan en la vista principal.
- renderice solo la vista con imágenes en el contexto de mapa de bits en lugar de la vista principal como lo está haciendo ahora.
le gustará saber quién hacer guardar 2 imágenes en 1 imagen.
Una de las fotos permite mover, rotar y acercar / alejar ...
Estoy haciendo esto, pero básicamente captura todas las cosas en la pantalla, incluyendo mis botones ...
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *savedImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Aquí hay un método para que la extensión UIImage combine varias imágenes:
class func combine(images: UIImage...) -> UIImage {
var contextSize = CGSizeZero
for image in images {
contextSize.width = max(contextSize.width, image.size.width)
contextSize.height = max(contextSize.height, image.size.height)
}
UIGraphicsBeginImageContextWithOptions(contextSize, false, UIScreen.mainScreen().scale)
for image in images {
let originX = (contextSize.width - image.size.width) / 2
let originY = (contextSize.height - image.size.height) / 2
image.drawInRect(CGRectMake(originX, originY, image.size.width, image.size.height))
}
let combinedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return combinedImage
}
Ejemplo:
UIImage.combine(image1, image2)
Puede usar este método, que es muy dinámico y puede especificar la posición inicial 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;
}
Puedes crear gráficos de contexto y dibujar ambas imágenes en él. Obtendrá un resultado de imagen de ambas imágenes de origen combinadas.
- (UIImage*)imageByCombiningImage:(UIImage*)firstImage withImage:(UIImage*)secondImage {
UIImage *image = nil;
CGSize newImageSize = CGSizeMake(MAX(firstImage.size.width, secondImage.size.width), MAX(firstImage.size.height, secondImage.size.height));
if (UIGraphicsBeginImageContextWithOptions != NULL) {
UIGraphicsBeginImageContextWithOptions(newImageSize, NO, [[UIScreen mainScreen] scale]);
} else {
UIGraphicsBeginImageContext(newImageSize);
}
[firstImage drawAtPoint:CGPointMake(roundf((newImageSize.width-firstImage.size.width)/2),
roundf((newImageSize.height-firstImage.size.height)/2))];
[secondImage drawAtPoint:CGPointMake(roundf((newImageSize.width-secondImage.size.width)/2),
roundf((newImageSize.height-secondImage.size.height)/2))];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
// C objetivo
UIImage *image1 = [UIImage imageNamed:@"image1.png"];
UIImage *image2 = [UIImage imageNamed:@"image2.png"];
CGSize size = CGSizeMake(image1.size.width, image1.size.height + image2.size.height);
UIGraphicsBeginImageContext(size);
[image1 drawInRect:CGRectMake(0,0,size.width, image1.size.height)];
[image2 drawInRect:CGRectMake(0,image1.size.height,size.width, image2.size.height)];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//set finalImage to IBOulet UIImageView
imageView.image = finalImage;
// Swift
let topImage = UIImage(named: "image1.png")
let bottomImage = UIImage(named: "image2.png")
let size = CGSize(width: topImage!.size.width, height: topImage!.size.height + bottomImage!.size.height)
UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
topImage!.draw(in: CGRect(x: 0, y: 0, width: size.width, height: topImage!.size.height))
bottomImage!.draw(in: CGRect(x: 0, y: topImage!.size.height, width: size.width, height: bottomImage!.size.height))
let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
//set finalImage to IBOulet UIImageView
mergeImage.image = newImage
Swift 3
En este ejemplo, la imagen frontal se está dibujando dentro de la otra imagen usando una inserción de 20% de margen.
La imagen de fondo debe dibujarse antes y luego la imagen frontal en secuencia.
Utilicé esto para colocar una imagen del icono "Reproducir" delante de una imagen de marco de video dentro de un UIImageView como abajo:
Uso:
self.image = self.mergedImageWith(frontImage: UIImage.init(named: "play.png"), backgroundImage: UIImage.init(named: "backgroundImage.png")))
Método:
func mergedImageWith(frontImage:UIImage?, backgroundImage: UIImage?) -> UIImage{
if (backgroundImage == nil) {
return frontImage!
}
let size = self.frame.size
UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
backgroundImage?.draw(in: CGRect.init(x: 0, y: 0, width: size.width, height: size.height))
frontImage?.draw(in: CGRect.init(x: 0, y: 0, width: size.width, height: size.height).insetBy(dx: size.width * 0.2, dy: size.height * 0.2))
let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
Swift-3 ( IOS10.3 )
extension UIImage {
func combineWith(image: UIImage) -> UIImage {
let size = CGSize(width: self.size.width, height: self.size.height + image.size.height)
UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
self.draw(in: CGRect(x:0 , y: 0, width: size.width, height: self.size.height))
image.draw(in: CGRect(x: 0, y: self.size.height, width: size.width, height: image.size.height))
let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
}
Uso
let image1 = UIImage(named: "image1.jpg")
let image2 = UIImage(named: "image2.jpg")
yourImageView.image = image1?.combineWith(image: image2)