iOS UIImage如何以编程方式将黑色转换为透明?

时间:2014-01-07 02:43:57

标签: ios objective-c colors uiimage transparency

我有一个悬停在按钮上的图标。图标为黑色和白色,我想以编程方式“剪切”黑色区域。

如何以编程方式将图标的黑色区域转换为透明?

enter image description here

2 个答案:

答案 0 :(得分:10)

您可以使用核心图像过滤器 - 尤其是过滤器CIMaskToAlpha

有关使用CIFilters的详细说明,请Apple's Core Image Programming GuideRayWenderlich tutorial

编辑:此滤镜采用黑色像素并使其完全透明,并将像素白色替换为不透明,灰色替换为部分透明等。

-(void)setImage:(UIImage *)image_
{

    UIImage *entryImage  = image_;
    CIContext *context = [CIContext contextWithOptions:nil];

    CIImage *image = [CIImage imageWithCGImage:[entryImage CGImage]];
    CIFilter *filter = [CIFilter filterWithName:@"CIMaskToAlpha"];
    [filter setDefaults];
    [filter setValue:image forKey:kCIInputImageKey];
    //    CIImage *result = [filter valueForKey:kCIOutputImageKey];
    CIImage *result = [filter outputImage];

    CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];

    UIImage *newImage = [UIImage imageWithCGImage:cgImage scale:[entryImage scale] orientation:UIImageOrientationUp];
    CGImageRelease(cgImage);
    [super setImage:newImage];
}

答案 1 :(得分:0)

图像将是原始图像大小的透明方形,完整的黑色区域应该用白色掩盖。当我们将这个蒙版图像叠加在实际的方形图像上时,输出将是预期的图像。

准备好遮罩图像后,实现遮罩图像的功能。

//屏蔽Thumnail图像

+(UIImage*) maskImage:(UIImage *)thumbImage 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([thumbImage CGImage], mask);
    CGImageRelease(mask);
    UIImage *maskedImage = [UIImage imageWithCGImage:masked];
    CGImageRelease(masked);
    return maskedImage;

}