[英]Make part of UIImage transparent, or crop that region
我有一個UIImage像這樣:
我想在中間移除一個rect,使其像這樣:
打孔的最簡單方法是添加圖層蒙版。
#import <QuartzCore/QuartzCore.h>
創建要剪切的路徑(要打孔的矩形)
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRect:yourView.bounds]; [maskPath appendPath:[UIBezierPath bezierPathWithRect:rectToPunchThroughTheView]];
然后創建一個遮罩層並將其添加到視圖中CAShapeLayer
將允許您定義任何路徑
CAShapeLayer *maskLayer = [CAShapeLayer layer]; maskLayer.fillRule = kCAFillRuleEvenOdd; maskLayer.fillColor = [UIColor blackColor].CGColor; maskLayer.path = maskPath.CGPath; yourView.layer.mask = maskLayer;
我將創建一個UIImage類別,並使用不同的rect裁剪圖像兩次。
這是我不久前在我的UIImage類別中添加的適合我的需求的方法:
- (UIImage *)cropWithRect:(CGRect)rect {
// If run on a retina device scale is 2 else 1
rect = CGRectMake(rect.origin.x * self.scale,
rect.origin.y * self.scale,
rect.size.width * self.scale,
rect.size.height * self.scale);
CGImageRef imgRf = CGImageCreateWithImageInRect(self.CGImage, rect);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef
scale:self.scale
orientation:self.imageOrientation];
CGImageRelease(imageRef);
return croppedImage;
}
你可以這樣
CGRect fullimageRect;
CGRect upperRect;
CGRect lowerRect;
UIImage *upperImage;
UIImage *lowerImage;
UIImage *finalImage;
UIGraphicsBeginImageContext(upperRect.size);
[[UIImage imageNamed:@"yourimage.png"] drawInRect:lowerRect];
upperImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContext(lowerRect.size);
[[UIImage imageNamed:@"yourimage.png"] drawInRect:lowerRect];
lowerImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSLog(@"%@",upperImage);
NSLog(@"%@",lowerImage);
UIGraphicsBeginImageContext(fullimageRect.size);
[upperImage drawInRect:upperRect];
[lowerImage drawInRect:lowerRect];
finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSLog(@"%@",finalImage);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.