Fusionner plusieurs images en une seule image sur l'iPhone

Je souhaite merge plusieurs images de tailles et de points différents.
Je veux les merge tous et les sauvegarder en une seule copy (image).

alors comment puis-je transférer des images dans une image?

J'ai trouvé la solution qui est si simple

vous pouvez merge plusieurs images en créant la méthode suivante

- (BOOL) mergedImageOnMainImage:(UIImage *)mainImg WithImageArray:(NSArray *)imgArray AndImagePointArray:(NSArray *)imgPointArray { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; UIGraphicsBeginImageContext(mainImg.size); [mainImg drawInRect:CGRectMake(0, 0, mainImg.size.width, mainImg.size.height)]; int i = 0; for (UIImage *img in imgArray) { [img drawInRect:CGRectMake([[imgPointArray objectAtIndex:i] floatValue], [[imgPointArray objectAtIndex:i+1] floatValue], img.size.width, img.size.height)]; i+=2; } CGImageRef NewMergeImg = CGImageCreateWithImageInRect(UIGraphicsGetImageFromCurrentImageContext().CGImage, CGRectMake(0, 0, mainImg.size.width, mainImg.size.height)); UIGraphicsEndImageContext(); [pool release]; if (NewMergeImg == nil) { return NO; } else { UIImageWriteToSavedPhotosAlbum([UIImage imageWithCGImage:NewMergeImg], self, nil, nil); return YES; } } 

appelle maintenant cette méthode de manière follwing

 NSArray *imgArray = [[NSArray alloc] initWithObjects: [UIImage imageNamed:@"image06.png"], [UIImage imageNamed:@"image07.png"], [UIImage imageNamed:@"image08.png"], [UIImage imageNamed:@"image09.png"], [UIImage imageNamed:@"BackBtn.png"], [UIImage imageNamed:@"Facebook.png"], nil]; NSArray *imgPointArray = [[NSArray alloc] initWithObjects: @"10", @"10", @"10", @"25", @"30", @"15", @"30", @"50", @"20", @"80", @"25", @"100", nil]; BOOL suc = [self mergedImageOnMainImage:[UIImage imageNamed:@"img001.png"] WithImageArray:imgArray AndImagePointArray:imgPointArray]; if (suc == YES) { NSLog(@"Images Successfully Mearged & Saved to Album"); } else { NSLog(@"Images not Mearged & not Saved to Album"); } 

Vous pouvez utiliser CIImage pour cela,

 -(UIImage *)mergeTwoImage:(UIImage*)image1 andImage2:(UIImage *)image2 { CIImage *topImage = [[CIImage alloc]initWithImage:image1]; CIImage *backgroundImage = [[CIImage alloc]initWithImage:image2]; CIFilter *darkenFilter = [CIFilter filterWithName:@"CIDarkenBlendMode" keysAndValues:kCIInputImageKey,topImage, @"inputBackgroundImage",backgroundImage,nil]; CIImage *resultOfFilter = darkenFilter.outputImage; CIContext *ctx = [CIContext contextWithOptions:nil]; CGImageRef imageToReturn = [ctx createCGImage:resultOfFilter fromRect:resultOfFilter.extent]; UIImage *outputImage = [UIImage imageWithCGImage:imageToReturn]; CGImageRelease(imageToReturn); imageToReturn = nil; return outputImage; } 

Vous pouvez utiliser ce code: –

  - (IBAction) mergeImage:(id)sender { UIImage *framedImage = firstImageView.image; CGSize size = CGSizeMake(firstImageView.frame.size.width, firstImageView.frame.size.height); UIGraphicsBeginImageContextWithOptions(size, self.view.alpha, 0.0); UIImage *imageToPlace = secondImageView.image; [framedImage drawInRect:CGRectMake(0, 0, firstImageView.frame.size.width, firstImageView.frame.size.height)]; [imageToPlace drawInRect:CGRectMake(18, 25, 242, 243)]; UIImage *imageC = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageView *newImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, framedImage.size.width,framedImage.size.height)]; newImageView.image = imageC; newImageView.contentMode = UIViewContentModeScaleAspectFill; } 

C'est pour 2 images qu'ils fusionnent deux UIImageViews en un. Pareil pour plusieurs images. Vous devez merge plusieurs images en fonction de votre taille.