gpt4 book ai didi

ios - 按自定义形状裁剪 UIImage

转载 作者:行者123 更新时间:2023-11-28 21:20:52 25 4
gpt4 key购买 nike

我有一个背景 UIImage,我想用自定义形状裁剪背景 UIImage,以便此背景图像仅通过自定义形状“出现”。例如,我有一个月亮形状的自定义形状,我希望背景图像只出现在月亮形状的部分。

根据另一个答案,我正在尝试对图像施加 mask ,如下所示:

- (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;
}

但是,结果看起来像enter image description here ,它有几个问题:

  1. 我手上的月亮是100*100,这个比例很奇怪
  2. 我的目标只是让图像穿过月亮 - 然而,此刻月亮是一个白色的形状,正从图像上方掠过

任何关于如何解决裁剪问题的想法都将不胜感激。谢谢!

最佳答案

在您的背景图片上,您必须通过 CALayer 添加自定义 mask 。请记住,您在 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];

关于ios - 按自定义形状裁剪 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39866050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com