如何合并图像以用形状填充其他图像?

How to merge an image to fill in other image with shape?

我想以一种形状将一幅图像合并到另一幅图像中。示例:

1-人物形象

2-形状图像:

那么怎么画呢。我已经实现了合并,但它没有填充到那个形状。

可以使用 Quartz 2D 框架中的掩码函数来执行此操作。它比使用 UI 套件的高级图像功能要复杂一些,但 Quartz 2D 为您提供了更多的能力来进行炫酷的图形技术。

可在此处找到相关的 Apple 开发者指南:https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html

对于这个例子,您想要为形状图像的内部创建一个遮罩形状。有两种方法可以做到这一点。一种方法是使用图像编辑软件创建第二个蒙版图像,其大小与您的形状图像相同,在您希望人物图像出现的区域为纯黑色,而在您不想出现的区域为白色。在这个例子中,那将是蓝色形状内的区域。重要的是不要裁剪此图像,否则它们将无法完全匹配。

另一种创建遮罩图像的方法是根据形状图像动态创建,老实说,这就是我的方法。这意味着您在应用程序中包含的图像更少,并且如果您对形状图像进行了任何更改,则也不必重新创建蒙版图像。您可以通过对形状图像的格式设置方式做一些小的更改来做到这一点。您将需要使用允许透明度的格式 - 首选 png - 以便形状外部的图像部分具有 alpha 透明度,这在您的 JPEG 图像中是白色的。确保图像中心的部分是白色的(实际上,形状图像所需部分未使用的任何颜色都可以,但我会在这个例子中说白色)并且你没有零件图像压缩后不是纯白色的。

然后您将使用 Quartz select 白色区域,并从中创建一个遮罩。这种技术有点复杂,但您可以在我上面链接的文档中找到您需要的内容。因此,您可能会从静态遮罩图像开始,然后在获得使第一种技术起作用的代码后转换为更复杂的技术。

当你有你的蒙版图像时,你将使用函数 CGImageMaskCreate(::::[=27 创建蒙版本身=]::::)。然后,您可以使用函数 CGImageCreateWithMask(::) 将蒙版应用于人物图像,这将为您提供带有人物肖像的图像,并从中心裁剪出正确的形状。

最后,您可以通过将蒙面人物图像放在形状图像的顶部来在您的应用程序中显示它,瞧,您将拥有您要找的东西。

此外,请记住,在使用 Quartz 2D 框架时,您必须确保在不再需要图像时释放图像,否则可能会发生内存泄漏。