1

我不知道这是否可以使用 PHP,但我想如果可以,这里有人会知道如何。我目前正在开展一个项目,用户可以在该项目中自定义要在整个站点中使用的全身主要头像。有一堆不同的脸、头发等透明 png 图像可以选择来制作他们的自定义头像。我的这个工作很好,但这是困难的部分。我希望能够使用面部、头发和胡须(如果是男性),并自动创建一个 80x80 的图像,用作论坛帖子等的小头像。

这有一些障碍。首先,所有的图像都是187x404的(大量的图像是透明的,角色的身体图像是通过图像堆叠来实现的,所以人脸图像实际上并没有那么大)。为此,必须有效地自动裁剪图像,以便移除所有额外空间,并在 80x80 点中显示实际的面部、头发或胡须部分。

第二个问题是一些头发或胡须(当放置在全尺寸面部图像上时)会超出 80x80 并被剪掉。所以图像必须以全尺寸拼凑在一起,然后调整大小以适应 80x80。

我知道将 3 个图像组合成一个的基本方法(将2-3 个透明 PNG 图像与 PHP 相互叠加),但据我所知。如果我疯了,这是不可能的,那么告诉我。我可能过于复杂了,所以如果你看到显然更容易实现这一点的方法,我很想听听。

4

3 回答 3

2

我认为你需要先决定,裁剪、调整大小或两者结合(裁剪到更大的正方形并调整大小)。

无论如何,如果您已经将图像合二为一,那么所有三个选项都可以在 php.ini 中轻松完成。看看imagecopyresampled()

于 2009-09-10T00:51:31.763 回答
1

最简单的方法是始终将脸部/头发/胡须放在图像的同一区域。然后把那个区域剪掉。

如果必须,您可以为每个图像存储额外数据,指定图像中的一个矩形,该矩形必须在小头像中可见。然后在您合成的所有图像中取这些矩形的最大末端,并将其裁剪+缩小到您的小头像大小。

但是,请注意,将 PNG 图像的大小调整几个像素(例如 83x83 -> 80x80)会大大降低质量,尤其是对于具有大量已定义边缘的图像。这是因为新图像中有许多像素[几乎]均匀地分布在原始图像的 4 个像素之间,而在边缘锐利的图像中,这会导致模糊。

因此,缩小图像以适合肖像不仅困难而且会降低质量。我宁愿剪掉胡须!

于 2009-09-10T01:16:36.750 回答
0

我可能过于简单化了,但你可以试试:

  1. 跟踪预合成的最大面部尺寸尺寸。

  2. 将合成图像输出到临时文件。

  3. 步骤 1 中最大值的裁剪平方

  4. 将裁剪的图像部分调整为 80 x 80

于 2009-09-10T00:51:30.150 回答