Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Merge two UIImages

I have imageA (taken from the users iPhone camera) and imageB, an image with a silly boarder (for eg) with plenty of transparent alpha space.

What I would like to to do is to merge these two images, laying imageB over imageA, and then saving them as imageC for other work.

Is there a way to do this?

Cheers

I've got this so far

-(void)merge
{
    CGSize size = CGSizeMake(320, 480);
    UIGraphicsBeginImageContext(size);

    CGPoint thumbPoint = CGPointMake(0,0);
    UIImage *imageA = imageView.image;
    [imageA drawAtPoint:thumbPoint];

    UIImage* starred = [UIImage imageNamed:@"imageB.png"];

    CGPoint starredPoint = CGPointMake(0, 0);
    [starred drawAtPoint:starredPoint];

    UIImage *imageC = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    imageView.image = imageC;
}

I can't see/dont know what I'm doing wrong here

like image 562
Sam Jarman Avatar asked Dec 07 '10 07:12

Sam Jarman


2 Answers

That code looks correct (though I would recommend converting it to use a created CGBitmapContext for thread-safety), but is imageB supposed to be a JPEG? JPEGs don't support transparency, so, in order for the blending to work, it should really be a PNG.

like image 152
Justin Spahr-Summers Avatar answered Oct 02 '22 11:10

Justin Spahr-Summers


Note that for retina support you should use: UIGraphicsBeginImageContextWithOptions(size, YES, 0); // 0 means let iOS deal with scale for you

like image 36
Geva Avatar answered Oct 02 '22 12:10

Geva