3

我正在努力寻找正确的方法来调整大小、裁剪和图像,并带有一个焦点区域。在我的情况下,焦点区域是图像中检测到的人脸,我需要确保该区域在裁剪后的版本中可见。

我有例如给出的重点领域。face_height、face_width、face_center_x 和 face_center_y。这些值是原始图像尺寸的百分比。

我想做的是得到一个例如。60x60 缩略图。正常的方法是调整大小,使图像的高度或宽度等于 60px,然后从中心裁剪 60x60,如下所示:

mogrify -resize 60x -gravity 'Center' -crop 60x60 image.jpg

可以采取什么方法将我的作物集中在给定区域周围?

我正在考虑一个包含多个路径的解决方案:

  1. 如果面部区域大于所需的缩略图,则调整图像的大小以使整个面部在 60x60 像素中可见,然后裁剪
  2. 如果面部区域小于想要的缩略图,则裁剪“扩大”我的面部区域,直到我想要的拇指可以适合该区域。然后裁剪。我想我需要确保这不超过原始图像的范围。

有更聪明的方法吗?您可以尝试制作一些示例代码吗?

谢谢!

4

1 回答 1

5

我首先在脚本或程序中进行算术运算,然后将精确坐标提供给 ImageMagick。

算术步骤:

  • 使用精确的像素值比使用百分比更容易操作,因此将face_heightface_width和转换为像素值。face_center_xface_center_y
  • 您需要矩形缩略图,因此选择最长的一边并使用它进行操作:

    longest_side = max(face_height, face_width)

  • 现在您可以计算作物的左上角:

    crop_x = face_center_x - 最长边 /
    2crop_y = face_center_y - 最长边 / 2

  • 如果四个裁切角中的任何一个超出图片尺寸,请进行调整:

    • crop_x并且crop_y都应该 >= 0
    • crop_x + longest_side应该小于图像宽度
    • crop_y + longest_side应该小于图像高度

计算完这些,ImageMagick 调用变得非常简单:

mogrify -crop {longest_side}x{longest_side}+{crop_x}+{crop_y} -resize 60x60 image.jpg   
于 2011-02-11T16:50:23.403 回答