确定图像文件是照片还是图形?

时间:2014-07-29 22:38:50

标签: web imagemagick gd photo graphic

我开始着手我认为可能有点像实验......

提出(或发现,因为它可能已经存在)一种方法来确定给定的图像文件,无论格式如何,都是照片或图形。

" Photo" 意味着像风景,人物等.V.S。 " Graphic" 表示图标,插图,图表,UI屏幕截图等。

我在过去一周提出了一个很好的PHP / ImageMagick脚本,它从图像文件中提取统计数据,并很好地将修正应用于白平衡,色调,振动,清晰度,阴影/高光。

现在我想更进一步:自动检测照片内容,然后应用上述处理。

到目前为止,一种有效一致的方法是确定图像是否具有EXIF数据,但这仅适用于JPEG。当然,这并非万无一失。

是否有任何已知的方法可通过ImageMagick,GD或其他方式检测照片" vs a" graphic"?

除了ImageMagick& amp;之外,我还有能力安装/运行应用程序。如果需要,我们的网络服务器上的GD。

谢谢!

1 个答案:

答案 0 :(得分:3)

照片中往往有不同颜色的 LOT (数千,数万和数十万)。其他图形倾向于使用有限数量的独特颜色(几十到几百)。

因此,ImageMagick命令可能能够帮助对大量文件进行分类:

 identify -format '%k\n'        file
 identify -format '%f :  %k\n'  file1 file2 file3 file4

特殊%k IM identify 百分比转义宏会导致计算并返回identify ed文件中唯一颜色的数量。以下是我自己的本地文件的一些示例:

 identify -format '%k' logo.png
    257

 identify -format '%k' testimage.png 
  20913

在本地目录中对一组15张4032x3024大小的照片运行它会产生这样的结果(每张照片花费超过2秒来计算颜色):

time identify -format '%f :  %k\n' *.JPG
  P4061782.JPG :  285127
  P4061783.JPG :  304247
  P4061784.JPG :  230241
  P4061785.JPG :  277545
  P4061786.JPG :  300632
  P4061787.JPG :  325916
  P4061788.JPG :  301766
  P4061789.JPG :  300821
  P4061790.JPG :  265080
  P4061791.JPG :  348247
  P4101941.JPG :  323714
  P4101942.JPG :  359688
  P4101943.JPG :  338563
  P4101944.JPG :  308578
  P4101945.JPG :  291853

   real  0m34.257s
   user  0m33.301s
   sys   0m0.678s

警告:使用矢量绘图应用程序(如inkscape)生成的复杂渐变也可能会产生许多独特的颜色......