簡體   English   中英

使部分UIImage透明,或裁剪該區域

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM