MB.
MB.

Reputation: 4211

iOS make part of an UIImage transparent

I have an UIImage where part of it has been selected by the user to clear out (make transparent). To make the selection I used NSBezierPath.

How can I clear/make transparent part of an UIImage in iOS?

Upvotes: 11

Views: 5827

Answers (2)

Nostradamus
Nostradamus

Reputation: 1557

Swift4 solution from landweber's above answer:

UIGraphicsBeginImageContext(image!.size)
image!.draw(at: CGPoint.zero)
let context:CGContext = UIGraphicsGetCurrentContext()!;
let bez = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 10, height: 10))
context.addPath(bez.cgPath)
context.clip();
context.clear(CGRect(x: 0,y: 0,width: image!.size.width,height: image!.size.height));
let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!;
UIGraphicsEndImageContext();

Upvotes: 0

landweber
landweber

Reputation: 2343

First, I assume you have a UIBezierPath (iOS), not an NSBezierPath (Mac OS X).

To do this, you will need to use core graphics, creating an image context, drawing the UIImage into that context, and then clearing the region specified by the NSBezierPath.

// Create an image context containing the original UIImage.
UIGraphicsBeginImageContext(originalImage.size);
[originalImage drawAtPoint:CGPointZero];

// Clip to the bezier path and clear that portion of the image.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddPath(context,bezierPath.CGPath)
CGContextClip(context);
CGContextClearRect(context,CGRectMake(0,0,originalImage.size.width,originalImage.size.height);

// Build a new UIImage from the image context.
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Upvotes: 15

Related Questions