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

Web 确定图像文件是照片还是图形?,web,imagemagick,gd,photo,graphic,Web,Imagemagick,Gd,Photo,Graphic,我正在进行一项我认为可能有点像实验的工作…… 提出(或发现,因为它可能已经存在)一种方法来确定给定的图像文件(无论其格式如何)是照片还是图形 “Photo”表示风景、人物等。V.S“Graphic”表示图标、插图、图表、用户界面截图等 在过去的一周里,我提出了一个很好的PHP/ImageMagick脚本,它从图像文件中提取统计数据,并很好地将修复应用于白平衡、色调、振动、锐度、阴影/高光 现在我想更进一步:自动检测照片内容,然后应用上述处理 到目前为止,有一种方法在某种程度上一直有效,即确定图像

我正在进行一项我认为可能有点像实验的工作……

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

“Photo”表示风景、人物等。V.S“Graphic”表示图标、插图、图表、用户界面截图等

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

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

到目前为止,有一种方法在某种程度上一直有效,即确定图像是否包含EXIF数据,但这只适用于JPEG。当然,这并不是万无一失的

是否存在通过ImageMagick、GD或其他方式检测“照片”与“图形”的已知方法

如果需要,我可以在我们的web服务器上安装/运行ImageMagick和GD以外的应用程序


谢谢

照片中往往有大量不同颜色的照片(千张、十分之一张和百张)。其他图形倾向于使用有限数量的独特颜色(几十种到几百种)

因此,ImageMagick命令可能有助于筛选大量文件:

 identify -format '%k\n'        file
 identify -format '%f :  %k\n'  file1 file2 file3 file4
特殊的
%k
IM
identification
percent escape宏导致计算并返回
identification
ed文件中的唯一颜色数。以下是我自己的本地文件的几个示例:

 identify -format '%k' logo.png
    257

 identify -format '%k' testimage.png 
  20913
在本地目录中对一组15张大小为4032x3024的照片运行它可以得到这个结果(每张照片需要2秒以上的时间来计算颜色):


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

有趣的想法,尽管我刚刚在保存为png的jpeg照片上尝试了这一点,但颜色总数仅为253,这使它看起来更像png类型的图像而不是照片。我想知道,从分辨率计算出预期的文件大小是否会更容易,例如,尺寸小得惊人的jpeg可能隐藏了png,而大的png文件大小可能表示图像。
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