2011-08-21 23 views
6

Estoy trabajando en la aplicación iphone donde tengo que unir tres imágenes y hacerlas una sola imagen. Quiero decir que tengo una imagen de fondo, una imagen de encabezado y una imagen más baja, necesito combinar todo esto para hacer una sola imagen, así puedo usarla para publicar en Facebook. Gracias.Iphonesdk Fusiona tres imágenes dos imágenes simples

* EDITAR * sé que el código de dos imágenes, pero ¿cómo puedo utilizarlo para tres imágenes:

UIGraphicsBeginImageContext(saveView.bounds.size); 
[saveView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+1

mira esto - http://stackoverflow.com/questions/5299452/how-can-i-crop-an-image-with-mask-and-combine-it-with-another-image-background –

+0

se basa opengl. Preferiré cualquier otra alternativa. –

+0

El código que publiqué para ti funcionará en tantas imágenes como el teléfono pueda manejar en la memoria - mira mi respuesta actualizada con el código extendido – shein

Respuesta

10

Usted sólo puede alinear juntos en un solo UIView (creo que incluso fuera de la pantalla, pero no lo he comprobado todavía) - y luego simplemente convertir ese UIView a un UIImage usando QuartzCode:

UIGraphicsBeginImageContext(myView.bounds.size); 
[myView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

a continuación, convertir eso en un formato - como PNG en el postura:

NSData *imageData = UIImagePNGRepresentation(image); 

Entonces el envío no debería ser demasiado difícil.

EDITAR Aquí es un ejemplo extendido también se puede ver durante 3 imágenes - por supuesto puede utilizar el Interface Builder y salidas en lugar de escribir todo - pero se puede copiar y pegar esto para tratar:

UIImageView *imgView1, *imgView2, *imgView3; 
imgView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1"]]; 
imgView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2"]]; 
imgView3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image3"]]; 

imgView1.frame = CGRectMake(0, 0, 50, 50); 
imgView2.frame = CGRectMake(50, 50, 100, 100); 
imgView3.frame = CGRectMake(100, 100, 200, 200); 

[referenceView addSubview:imgView1]; 
[referenceView addSubview:imgView2]; 
[referenceView addSubview:imgView3]; 

UIGraphicsBeginImageContext(referenceView.bounds.size); 
[referenceView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

resultView = [[UIImageView alloc] initWithImage:finalImage]; 
resultView.frame = CGRectMake(0, 0, 320, 480); 
[self.view addSubview:resultView]; 

referenceView.hidden = YES; 

NOTA He comprobado y UIView debe dibujarse/visible en el momento de llamar a renderInContext (puede estar fuera de pantalla pero no puede ocultarse o alfa = 0 porque se volverá invisible). Entonces, colócalo fuera de la pantalla o inmediatamente ocúltalo después del dibujo

+0

Encontré que no tenía que agregar el referenceView a la vista principal para renderizarlo. Sin embargo, tuve un problema al procesar el contexto con mi código inicial, pero después de cambiarlo, mi respuesta que sigue parece funcionar bien. – Christopher

2

La respuesta de Shein me ayudó pero descubrí que no tenía que agregar UIView a la vista principal para poder representarla. He aquí un ejemplo de cómo agregar texto a una imagen ...

UIImage *image = [UIImage imageNamed:@"toolbar_icon"]; // image is 20 x 20 .png 

    UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; 
    [tempView addSubview:[[UIImageView alloc] initWithImage:image]]; 

    UILabel *label = [[UILabel alloc] initWithFrame:tempView.frame]; 
    [label setText:[NSString stringWithFormat:@"%d", [self countValue]]]; 
    [label setFont:[UIFont systemFontOfSize:22.0]]; 
    [label setTextColor:[UIColor lightTextColor]]; 
    [label setTextAlignment:UITextAlignmentCenter]; 
    [label setBackgroundColor:[UIColor clearColor]]; 
    [tempView addSubview:label]; 

    UIGraphicsBeginImageContext(tempView.bounds.size); 
    [tempView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    UIBarButtonItem *countItem = [[UIBarButtonItem alloc] initWithImage:finalImage 
                     style:UIBarButtonItemStyleBordered 
                     target:self 
                     action:@selector(countAction:)]; 

NOTA: de repente me di cuenta de mi respuesta incluye la adición de una etiqueta a una imagen que es lo que estaba tratando de hacer antes de encontrar esto. Referencia Combine Label Text With Image