iOS颜色在UIImage中透明

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

我已经通过无数的答案和链接,看看没有什么作品(例如, 如何使一个颜色透明的UIImage答案1删除一切,但红色,答案2显然不工作,因为为什么是CGImageCreateWithMaskingColors()返回零这种情况? )。

更新:

如果我用UIImage CGImageCreateWithMaskingColors我得到一个零值。 如果我删除了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通道来工作。

 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)]; 

你收到零,因为你发送的参数是无效的。 如果你打开苹果文档,你会看到这个:

组件
一组颜色组件,用于指定颜色或颜色范围来掩盖图像。 该数组必须包含2N个值{min [1],max [1],… min [N],max [N]},其中N是图像色彩空间中的分量数。 组件中的每个值都必须是有效的图像样本值。 如果图像具有整数像素分量,则每个值必须在范围[0..2 ** bitsPerComponent – 1](其中bitsPerComponent是图像的比特/分量数)。 如果图像具有浮点像素分量,则每个值可以是任何作为有效颜色分量的浮点数。

您可以通过按住Option + Mouse快速打开文档点击一些function或类,如CGImageCreateWithMaskingColors。

我做了这个静态函数,删除你可以使用它的白色背景,replace你想要删除的颜色范围的蒙版:

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