iOS - 如何为头像创建分层图像

Posted

技术标签:

【中文标题】iOS - 如何为头像创建分层图像【英文标题】:iOS - How to layer images for avatar creation 【发布时间】:2017-05-05 18:01:35 【问题描述】:

我正在开发一个应用程序,该应用程序允许用户通过从提供的图像列表中选择各种身体/​​头发/服装/眼睛/等样式来创建自己的 2D 头像(类似于 Bitmoji)。到目前为止,我是通过将几个 UIImageView 相互叠加来实现的,每个 UIImageView 代表一个特定的可定制元素。用户可以通过首先从两个集合视图中选择元素类型,然后选择元素图像来选择分配给每个 UIImageView 的图像。例如,如果用户在一个集合视图中单击头发类型类别,则他们可以从另一个集合视图中的数字列表中选择来更改 hairTypeImageView 的照片。

我认为这种方法的问题很明显:它需要大量的 UIImageViews,这似乎大大降低了应用程序的速度。此外,除此之外,我们要求用户能够更改每个元素的基本颜色,而无需更改其阴影或边框。到目前为止,我能够做到这一点的唯一方法是让应用程序为每个元素存储两个图像,一个用于底层填充颜色,另一个用于顶层阴影和边框,然后使用

fillColorImageView.image = [fillColorImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[fillColorImageView setTintColor:color];

更改填充颜色。此解决方案有效,但它使应用程序的效率更低,因为这意味着我现在必须拥有双倍数量的 UIImageView(每个可自定义元素两个),另外我必须创建双倍的艺术品,并且应用程序必须存储双倍的图像.

有没有我想念的更好的方法来做到这一点?

【问题讨论】:

【参考方案1】:

我会看看创建一个 UIImageView 子类,它会覆盖 drawRect: 调用以绘制头像的各个层。这将允许拥有一个能够绘制整个头像的 UIImageView 实例。

第二个选项是使用 Core Graphics 来渲染你的头像。如果您需要更好地控制输出,这是一个不错的选择,因为 Core Graphics 框架提供了一套丰富的渲染工具和功能。

对我来说,决定可能取决于您需要进行多少图像处理。如果只是将各种图像“堆叠”在一起并更改一些颜色,我可能会使用 UIImageView 子类。

对于这些方法中的任何一种,请查看https://developer.apple.com/library/content/documentation/2DDrawing/Conceptual/DrawingPrintingios/HandlingImages/Images.html

【讨论】:

我实际上也发现了一些类似的东西:遍历 UIImages 数组,在 UIGraphicsImageContext 中绘制它们,然后将生成的上下文保存为新的 UIImage。这解决了除了颜色编辑之外的所有问题,我认为我无法解决。

以上是关于iOS - 如何为头像创建分层图像的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将 png 转换为分层的 PSD 文件?

分层数据模型的替代方案

分层图最短(长)路

在 TVML (tvOS) 中创建分层图像

如何为多个图像创建随机数以在 Grid 中随机显示而不在 iOS 中重复?

Ceph 分层缓存--Tiering Cache