在iOS中使用UIImage或CGImage API可以掩盖这种types

我有一个UIImage与一些文字,并希望应用图案UIImage作为掩蔽。 这可能吗 ? 我明白,用UILabel我们可以使用CAGradientLayer获得这种渐变。 但是,如果源是一个UIImage可以做到这一点?

图像可能有一些符号/图片等,而不是普通的字符,因此UIImage。 此外,我可以通过应用不同的掩蔽模式根据上下文重用图像。

这可能吗 ?

感谢你的帮助。

编辑:感谢您的所有答案。 我知道将渐变应用于文本标签或创build具有文本的图像。 但我的目标是得到这个。 – > 点击这里

即我有一个像一个透明的背景花一些画的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]; } 

有关更长时间的讨论,请查看评论主题: http : //iosdevelopertips.com/cocoa/how-to-mask-an-image.html

是的 :)

 textField.textColor = [UIColor colorWithPatternImage: 
[UIImage imageNamed:@"rainbowGradient.png"]];

如果你想严格控制,Jason Whyne的想法可能会奏效。 但是我喜欢这个,因为它缩短了大概8行。

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

 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做分配(在“create” – > retain rule之后),所以你应该在使用后释放mask和image:

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

根据ADC文档:…返回值Quartz位图图像掩码。 你有责任通过调用CGImageRelease来释放这个对象。