如何清除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通道来实现它。
答案 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)