为UIImage创建alpha
我试图在我的应用中创建一个允许用户提取现有图像的指定区域的功能,并将其保存为启用Alpha的png。为UIImage创建alpha
我已经把UIView
ontop的一个UIImageView
的 - 的imageView
显示图像,而你是在透明view
绘制你的面具。对于绘图,我使用UIBezierPath
。用户可以在物体周围画画,而里面会暂时填充黑色。
用户从照片卷中选取图像,如左图所示,并在底层UIImageView
中显示,当用户绘制了一个形状(自动关闭)时,在覆盖的UIView
上,它看起来像右图:
这工作正常,但是当用户然后单击“裁剪”,那么魔术应该开始。到目前为止,我只能够创建一个“面具”,并将其保存为上滚动的图像,如在此处显示(心中永远的纵横比,那我下次再收拾):
这只是一个普通的图像,从路径/形状创建,颜色(白底黑,透明不黑)。 我需要的是使用这个“图像”作为原始图像的alpha通道的一些方法。
我知道这些是两个完全分开的东西,即一个alpha通道与图像不一样,但我具有这种形状,所以我想知道是否有任何可能的方式来“裁剪”或用我的数据“alpha out”。我想结束了,这是猫的脸的PNG,与周围环境100%透明(或甚至不存在),这样我可以改变的背景下,这样的:
重要的是要注意我是不谈论展示与应用的蒙一个UIImageView
一个UIImage
,我说的是创建一个新的形象,立足现有的图像上,与其它图像相结合,我想很重要以某种方式转换为第一个图像的alpha通道,从而节省一个像上面的图像,透明度。
我不是太熟悉图像处理的数据,所以我想知道是否有人知道如何基于两个图像,一个充当阿尔法另一方面,当既没有图像的塑造新形象必须有一个alpha通道开始。
回答:
的方法,下面将你的原始图像和掩模图像(黑色形状),并返回一个UIImage
仅包括由掩模覆盖的所述图像的内容:
+ (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *) mask {
CGImageRef imageReference = image.CGImage;
CGImageRef maskReference = mask.CGImage;
CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskReference),
CGImageGetHeight(maskReference),
CGImageGetBitsPerComponent(maskReference),
CGImageGetBitsPerPixel(maskReference),
CGImageGetBytesPerRow(maskReference),
CGImageGetDataProvider(maskReference),
NULL, // Decode is null
YES // Should interpolate
);
CGImageRef maskedReference = CGImageCreateWithMask(imageReference, imageMask);
CGImageRelease(imageMask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference];
CGImageRelease(maskedReference);
return maskedImage;
}
掩模之外的区域将是透明的。然后,您可以将生成的UIImage
与背景颜色组合在一起。
以上是 为UIImage创建alpha 的全部内容, 来源链接: utcz.com/qa/258282.html