Iphone iOS中的UIImage或CGImage API是否可以实现这种掩蔽

Iphone iOS中的UIImage或CGImage API是否可以实现这种掩蔽,iphone,objective-c,ios,uiimage,masking,Iphone,Objective C,Ios,Uiimage,Masking,我有一个UIImage和一些文本,并希望应用模式UIImage作为掩蔽。这可能吗? 我知道用UILabel我们可以用CAGradientLayer得到这种梯度。但是,如果源是UIImage,那么可以这样做吗 图像可能有一些符号/图片等,而不是常规字符,因此是UIImage。此外,我还可以根据上下文应用不同的遮罩模式来重用图像 谢谢你的帮助 编辑:谢谢你的回答。 我理解将渐变应用于文本标签或创建包含文本的图像。 但我的目标是得到这个 i、 我有一个png与一些绘画像一个透明的背景花。我想在运行时

我有一个UIImage和一些文本,并希望应用模式UIImage作为掩蔽。这可能吗? 我知道用UILabel我们可以用CAGradientLayer得到这种梯度。但是,如果源是UIImage,那么可以这样做吗

图像可能有一些符号/图片等,而不是常规字符,因此是UIImage。此外,我还可以根据上下文应用不同的遮罩模式来重用图像

谢谢你的帮助

编辑:谢谢你的回答。 我理解将渐变应用于文本标签或创建包含文本的图像。 但我的目标是得到这个

i、 我有一个png与一些绘画像一个透明的背景花。我想在运行时使用gradient.png将渐变应用于图片中的对象,如上图所示。用掩蔽可以吗


谢谢

看起来您应该能够使用CGImageMaskCreate:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
        CGImageGetHeight(maskRef),
        CGImageGetBitsPerComponent(maskRef),
        CGImageGetBitsPerPixel(maskRef),
        CGImageGetBytesPerRow(maskRef),
        CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
    return [UIImage imageWithCGImage:masked];

}
有关更长时间的讨论,请查看此处的评论线程: 是的,是:)

textField.textColor=[UIColor WithPatternImage:
[UIImage ImageName:@“rainbowGradient.png”]
如果你想要强力控制,杰森·维恩的想法可能会奏效。但我喜欢这个,因为它大约短8行

这里是另一种绘制文本图像的方法。它基于混合模式中的
kCGBlendModeSourceIn
blending模式:在清晰的背景上绘制文本,然后在整个位置绘制填充

NSString *theString = ...;
UIFont *theFont = ...;
CGSize stringSize = [theString sizeWithFont:theFont];

// The background must be clear (fully transparent), hence NO as the 2nd argument
UIGraphicsBeginImageContextWithOptions(stringSize, NO, 0);
[theString drawAtPoint:CGPointZero withFont:theFont];
// This effectively colorizes the image. Use a pattern color...
[patternColor set];
UIRectFillUsingBlendMode(CGRectMake(0, 0, stringSize.width, stringSize.height), kCGBlendModeSourceIn);
// ... or an image:
[patternImage drawInRect:CGRectMake(0, 0, stringSize.width, stringSize.height) blendMode:kCGBlendModeSourceIn alpha:1.0f];

UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

使用口罩的样品很好,效果也很好,但你在泄漏。 CGImageMaskCreate和CGImageCreateWithMask不分配(遵循“创建”->retain规则) 因此,您应该在使用以下各项后释放遮罩和图像:

CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
UIImage * result =  [UIImage imageWithCGImage:masked];
CGImageRelease(mask);
CGImageRelease(masked);
return result;
根据ADC文件: ... 返回值
石英位图图像掩模。您有责任通过调用CGImageRelease来释放此对象。

您试图实现的目标的模型(例如,在photoshop中制作)会很有帮助。@kris这里是链接..[link]它实际上是链接“这可能吗”。。对不起,这个词让人费解。。我应该离开这个链接。我已经在上面的评论中提供了我想要达到的效果的模型。这是链接。我尝试过使用cgimamaskcreate()的上述方法,但没有成功。true。我在我的标签应用程序中使用了它。但在我的例子中,文本在图像中。
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
UIImage * result =  [UIImage imageWithCGImage:masked];
CGImageRelease(mask);
CGImageRelease(masked);
return result;