簡體   English   中英

通過自定義形狀裁剪UIImage

[英]Cropping UIImage by custom shape

我有一個背景UIImage,我想用一個自定義形狀來裁剪背景UIImage,因此該背景圖像只能通過該自定義形狀“出現”。 例如,我有一個月亮形的自定義形狀,並且我希望背景圖像僅出現在月亮形的部分上。

根據另一個答案,我試圖在圖像上加上一個遮罩,如下所示:

- (UIImage *)createImageFromImage:(UIImage *)image
                    withMaskImage:(UIImage *)mask {
    CGImageRef imageRef = image.CGImage;
    CGImageRef maskRef = mask.CGImage;

    CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                             CGImageGetHeight(maskRef),
                                             CGImageGetBitsPerComponent(maskRef),
                                             CGImageGetBitsPerPixel(maskRef),
                                             CGImageGetBytesPerRow(maskRef),
                                             CGImageGetDataProvider(maskRef),
                                             NULL,
                                             YES);

    CGImageRef maskedReference = CGImageCreateWithMask(imageRef, imageMask);
    CGImageRelease(imageMask);

    UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference];
    CGImageRelease(maskedReference);

    return maskedImage;
}

但是,結果看起來像 在此處輸入圖片說明 ,並且有幾個問題:

  1. 我的月亮是100 * 100,這已經拉伸了一個奇怪的比例
  2. 我的目標僅是使圖像穿過月球-但是,此刻,月亮是白色的形狀,即將越過圖像

關於如何解決農作物問題的任何想法將不勝感激。 謝謝!

在背景圖片上,您必須通過CALayer添加自定義蒙版。 請記住,您在mask.png(月亮)中着色的所有內容都將可見,而透明的所有內容均不會顯示。

UIImage *moonImage = [UIImage imageNamed:@"mask.png"];
CALayer *maskLayer = [CALayer layer];
[maskLayer setContents:(id)moonImage.CGImage];
[maskLayer setFrame:CGRectMake(0.0f, 0.0f, moonImage.size.width, moonImage.size.height)];

UIImageView *yourBackgroundImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
// Keep your image view in tact here, just add:
[yourBackgroundImageView.layer setMask:maskLayer];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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