智能图像裁剪


Intelligent Image Cropping

我有点拘泥于向我的主题客户解释,通过智能地找出最佳位置来裁剪图像根本不是一件容易的事。我甚至怀疑这是否是100%可能的。

比如说,在肖像中,如果图像被裁剪成正方形或比例,是否可以将焦点集中在脸上并相应地进行裁剪。

如果你想了解更多细节,这是有问题的问题http://getsatisfaction.com/autochrome/topics/portrait_image_thumbnail

您可以尝试ImageKit.io。它提供开箱即用的智能裁剪。它在内部使用人脸和特征检测来进行智能裁剪所需的计算。ImageKit还有一个人脸裁剪模式,可以从原始图像中挑选人脸来创建缩略图。

在我看来,您的客户遇到的问题是纵横比问题。

您可以从中确定源纵横比和裁剪/调整。只需使用getImageGeometery()

http://www.php.net/manual/en/imagick.getimagegeometry.php

或者,如果使用GD:

http://www.php.net/manual/en/function.getimagesize.php

裁剪图像的"正确"位置是主观的。确定什么对场景构图很重要,既是艺术也是科学。如果一个计算机算法能够完美地解决这个问题,你就可以用它(以及分布在世界各地的大量相机)赢得每年的《国家地理》摄影比赛:-)。

也就是说,如果你能更准确地定义图像中感兴趣的部分,比如你提到的人脸,那么问题就会从"几乎不可能"变成"非常困难"。可以使用人脸检测算法,然后裁剪到包含所有人脸的最小边界框。

(希望您已经找到了解决方案,因为这是一个非常古老的问题。)我发现了一些有帮助的选项:

  • Cloudinary API-它支持一些先进的裁剪方法,如自动裁剪和基于人脸检测的裁剪。我目前正在探索这个爱好项目
  • 谷歌视觉API-我认为这是杀鸡用牛刀,但你可以用它来裁剪肖像,因为它有很好的人脸检测和显示裁剪提示。我把它用于业余项目,效果非常好
  • Grafika-这个新的PHP图形库拥有智能裁剪功能,它可以检测图像的重要区域,并确保在裁剪时保留图像(我还没有尝试过)

一个流行的解决方案是调整图像的大小并居中,然后裁剪剩下的部分:如果原始图像太宽,则从左到右,如果图像太高,则从上到下。由于前面提到的原因,它远非完美,但很容易实现自动化。

使用gd库执行此操作的示例代码如下:https://gist.github.com/1695782

让用户选择他们想要裁剪的照片部分。将偏移量添加到GD的裁剪参数中。祝你好运