iOS颜色在UIImage中透明

时间:2011-11-29 12:54:23

标签: ios uiimage

如何清除UIImage的洋红色部分并使其透明?

我已经浏览了很多答案和SO上的链接,没有任何作品(例如How to make one color transparent on a UIImage?答案1删除了除红色之外的所有内容,答案2显然因Why is CGImageCreateWithMaskingColors() returning nil in this case?而无效)。

更新

如果我使用CGImageCreateWithMaskingColors和UIImage,我得到一个零值。如果我删除alpha通道(我将图像表示为JPEG并将其读回),CGImageCreateWithMaskingColors将返回涂有黑色背景的图像。

Update2,代码:

返回零:

const float colorMasking[6] = {222, 255, 222, 255, 222, 255};
CGImageRef imageRef = CGImageCreateWithMaskingColors(anchorWithMask.CGImage, colorMasking);

NSLog(@"image ref %@", imageRef);
// this is going to return a nil imgref.

UIImage *image = [UIImage imageWithCGImage:imageRef];

返回黑色背景的图像(由于没有Alpha通道,这是正常的):

UIImage *inputImage = [UIImage imageWithData:UIImageJPEGRepresentation(anchorWithMask, 1.0)];

const float colorMasking[6] = {222, 255, 222, 255, 222, 255};
CGImageRef imageRef = CGImageCreateWithMaskingColors(inputImage.CGImage, colorMasking);

NSLog(@"image ref %@", imageRef);
// imgref is NOT nil.

UIImage *image = [UIImage imageWithCGImage:imageRef];

UPDATE3:

我通过在屏蔽过程之后添加alpha通道来实现它。

3 个答案:

答案 0 :(得分:4)

UIImage *image = [UIImage imageNamed:@"image.png"];

const float colorMasking[6] = {1.0, 1.0, 0.0, 0.0, 1.0, 1.0};
image = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(image.CGImage, colorMasking)];

您收到的是nil,因为您发送的参数无效。如果您打开Apple文档,您将看到:

  

组件
  一组颜色组件,用于指定颜色或颜色范围   使用屏蔽图像。该数组必须包含2N   值{min [1],max [1],... min [N],max [N]}其中N是数字   图像色彩空间中的成分。组件中的每个值必须为a   有效图像样本值。如果图像具有整数像素分量,那么   每个值必须在[0 .. 2 ** bitsPerComponent - 1]范围内(其中   bitsPerComponent是图像的位数/分量数。如果图像   具有浮点像素分量,则每个值可以是任意值   浮点数,它是一个有效的颜色分量。

您可以通过按住Option + Mouse快速打开文档单击某个函数或类,如CGImageCreateWithMaskingColors。

答案 1 :(得分:4)

我制作了这个静态功能,删除了白色背景,你可以用它来替换你想要删除的颜色范围的蒙版:

+ (UIImage*) processImage :(UIImage*) image
{
    const float colorMasking[6]={222,255,222,255,222,255};
    CGImageRef imageRef = CGImageCreateWithMaskingColors(image.CGImage, colorMasking);
    UIImage* imageB = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return imageB;
}

答案 2 :(得分:0)

我在 CIImage 中做了这个,Vision 的后处理是一个 pixelBuffer:

    let ciImage = CIImage(cvPixelBuffer: pixelBuffer)
    let filteredImage = ciImage.applyingFilter("CIMaskToAlpha")
    self.picture.image = UIImage(ciImage: filteredImage)