使用PHP自动将3个图像对齐并调整为小图像?

时间:2009-09-10 00:42:48

标签: php image resize gd

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

这有一些障碍。首先,所有图像都是187x404(大量图像是透明的,字符体图像是通过堆叠图像来实现的,因此面部图像实际上并不那么大)。为了实现这一点,图像将有效地自动裁剪,以便删除所有额外空间,并在80x80点显示实际的面部,头发或胡须部分。

第二个问题是,一些头发或胡须(当放在全​​尺寸脸部图像上时)会延伸超过80x80并被切断。因此,图像必须以完整尺寸拼接在一起,然后调整大小以适应80x80。

我知道将3张图像合并为一张(Combine 2-3 transparent PNG images on top of each other with PHP)的基本方法,但这就是我所得到的。如果我疯了,这是不可能的,那么告诉我。我可能过于复杂了,所以如果你看到并且明显更容易实现这一点,我很乐意听到它。

3 个答案:

答案 0 :(得分:2)

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

无论如何,如果你已经将图像组合成一个,那么这三个选项在php中都很容易。看看imagecopyresampled()

答案 1 :(得分:1)

最简单的方法就是始终将脸部/头发/胡须贴合在图像的同一区域。然后将该区域裁剪掉。

如果必须,您可以为每个图像存储额外数据,指定图像中的矩形必须在小头像中可见。然后在你构图的所有图像中取出这些矩形的最大极限,并将其缩小到你的小化身大小。

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

因此,缩小图像以适应肖像不仅困难,而且还会降低质量。我改掉了胡子!

答案 2 :(得分:0)

我可能会过分简化这一点,但你可以尝试一下:

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

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

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

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